原创

HashMap 的实用技巧


1.初始化时设置初始容量和负载因子

Hashmap 的默认初始容量是 16,负载因子是 0.75。如果知道数据量较大,可以在初始化时设置初始容量和负载因子,以减少扩容次数,提高性能。

Map<String, Object> map = new HashMap<>(64,0.8f);
  • 64 初始容量
  • 0.8f 负载因子

2.使用 compute 方法动态计算值

compute 方法可以根据键动态计算值,并将其放入 Hashmap 中。

Map<String, Integer> map = new HashMap<>();
map.put("test",1);
map.compute("test", (key,value) -> value == null ? 1 : value + 1 );
System.out.println(map.get("test"));//输出:2

3.使用 merge 方法合并值

merge 方法可以合并键对应的值,特别适合用于统计或累加场景。

Map<String, Integer> map = new HashMap<>();
map.put("test", 1);
map.merge("test", 1, Integer::sum);
System.out.println(map.get("test"));//输出:2

4.使用 getOrDefault 方法避免空指针

getOrDefault 方法可以在键不存在时返回默认值,避免空指针异常。

Map<String, Integer> map = new HashMap<>();
map.put("test", 1);

int count = map.getOrDefault("test1", 0);
System.out.println(count);//输出:0

5.使用 putIfAbsent 方法避免覆盖

putIfAbsent 方法只有在键不存在时才会插入值,避免覆盖已有值。

Map<String, Integer> map =new HashMap<>();
map.put("test", 1);

map.putIfAbsent("test", 2);
System.out.println(map.get("test"));//输出:1

6.使用 forEach 方法遍历

forEach 方法可以简化 HashMap 的遍历操作。

Map<String, Integer> map=new HashMap<>();
map.put("test1", 1);
map.put("test2", 2);
map.forEach((key,value)->System.out.println(key + ":"value));
// 输出:
// test1:1
// test2:2

7.使用 entrySet 高效遍历

entrySet 方法返回键值对的集合,适合需要同时访问键和值的场景。

Map<String,Integer> map = new HashMap<>();
map.put("test1"1);
map.put("test2",2);
for (Map.Entry<String, Integer> entry : map.entrySet()){
    System.out.println(entry.getKey() + ":" +  entry.getValue());
}

8.使用 computeIfAbsent 延迟计算值

computeIfabsent 方法可以在键不存在时动态计算值,并将其放入 HashMap 中。

Map<String, List<String>> map= new HashMap<>();
map.computeIfAbsent("tests", k -> new ArrayList<>()).add("test1");
System.out.println(map.get("tests"));//输出:[test1]

9.使用 replace 方法更新值

replace 方法可以更新指定键的值,只有在键存在时才会更新。

Map<String, Integer> map = new HashMap<>();
map.put("test",1);
map.replace("test",2);
System.out.println(map.get("test"));//输出:2

10.使用 replaceAll 方法批量更新值

replaceAll方法可以批量更新 HashMap 中的所有值。

Map<String, Integer> map = new HashMap<>();
map.put("test1", 1);
map.put("test2", 2);
map.replaceAll((key,value -> value * 2 );
System.out.println(map);//输出:{test1=2,test2=4}

11.使用 remove 方法删除键值对

remove 方法可以删除指定键的键值对。

Map<String,Integer> map=new HashMap<>();
map.put("test", 1);
map.remove("test");
System.out.println(map.containsKey("test"));//输出:false

12.使用 keySetvalues 方法获取键或值集合

keySet 方法返回所有键的集合,values 方法返回所有值的集合.

Map<String, Integer> map = new HashMap<>();
map.put("test1", 1);
map.put("test2", 2);
Set<String> keys = map.keySet();
Collection<Integer> values = map.values();
System.out.println(keys);// 输出:[test1,test2]
System.out.println(values);//输出:[1,2]

13.使用 LinkedHashMap 保持插入顺序

LinkedHashMapHashMap 的子类,可以保持键值对的插入顺序。

Map<String, Integer> map =new LinkedHashMap<>();
map.put("test1", 1);
map.put("test2", 2);
map.forEach((key, value)->System.out.println(key +":" +value));
// 输出:
// test1: 1
// test2: 2

14.使用 TreeMap 实现排序

TreeMapHashMap 的另一种变体,可以根据键的自然顺序或自定义顺序排序。

Map<String, Integer> map = new TreeMap<>();
map.put("test2",2);
map.put("test1",1);
map.forEach((key,value)->System.out.println(key + ":" + value));
// 输出:
// test1:1
// test2:2
Java
  • 作者:一介闲人(联系作者)
  • 发表时间: 2025-01-24 10:20
  • 版权声明:原创-转载需保持署名
  • 公众号转载:请在文末添加本文链接
  • 评论