HashMap的putIfAbsent()方法
public static void main(String[] args) {
HashMap<String, Object> hashMap = new HashMap<>();
Object obj = hashMap.putIfAbsent("A", null);
if (obj == null) {
System.out.println("Shit : NPE!");
}
hashMap.putIfAbsent("A",16);
hashMap.putIfAbsent("A",17);
hashMap.putIfAbsent("B", 100);
hashMap.putIfAbsent("B", 150);
Integer i = (Integer)hashMap.putIfAbsent("B", 200);
hashMap.put("C", 222);
hashMap.put("C", 23);
System.out.println(hashMap);
System.out.println(i);
}
// 运行结果 Shit : NPE! {A=16, B=100, C=23} 100
#
来源
在此方法出现在HashMap里面之前,JDK给出的解决方案是ConcurrentMap的putIfAbsent()方法。
出现在HashMap里面的这个putIfAbsent()方法与之前的解决方法具有相同的功能,
在上面的测试代码中
- 当value为null的时候,putIfAbsent()方法会覆盖null值,直到value不为null为止
- 当value初始值不为null的时候,putIfAbsent()保证返回值始终是唯一的,并且是多线程安全的
- putIfAbsent()是有返回值的,应该对他的返回值进行非空判断
- 2和3主要应用在单例模式中