第1次put返回值:null 第2次put返回值:oldvalue 第1次putIfAbsent返回值:null 第2次putIfAbsent返回值:oldvalue map集合的值{A=newvalue,B=oldvalue} 1. 2. 3. 4. 5. 当key值不存在时,put和putIfAbsent都返回了null。当key值已存在时,都返回了旧的value,put进行了value替换,putIfAbsent保持旧值。 源码 pub...
Map<String, String> map = new HashMap<>(); map.put("a","A"); map.put("b","B"); String v = map.putIfAbsent("b","v"); // 输出 B System.out.println(v); String v1 = map.putIfAbsent("c","v"); // 输出 null System.out.println(v1); } 1. 2. 3. 4. 5. 6. 7. ...
String v = map.putIfAbsent("b","v"); // 输出 B System.out.println(v); String v1 = map.putIfAbsent("c","v"); // 输出 null System.out.println(v1); } 1 2 3 4 5 6 7 8 9 10 11 2. computeIfAbsent computeIfAbsent:存在时返回存在的值,不存在时返回新值 参数为:key,value计算...
中存在,返回和这个 key 值对应的 value, 如果所指定的 key 不在 HashMap 中存在,则返回 null。
putIfAbsent() 方法的语法为:hashmap.putIfAbsent(K key, V value)注:hashmap 是 HashMap 类的一个对象。参数说明:key - 键 value - 值返回值如果所指定的 key 已经在 HashMap 中存在,返回和这个 key 值对应的 value, 如果所指定的 key 不在 HashMap 中存在,则返回 null。
putIfAbsent方法主要是在向ConcurrentHashMap中添加键—值对的时候,它会先判断该键值对是否已经存在。 如果不存在(新的entry),那么会向map中添加该键值对,并返回null。 如果已经存在,那么不会覆盖已有的值,直接返回已经存在的值。 对上面方法进行改造: publicstaticLocalegetInstance(Stringlanguage,Stringcountry,Stringvar...
putIfAbsent 返回“与指定键关联的先前值,如果没有键的映射,则返回 null”。 所以,如果密钥已经存在,它们返回相同的东西,但如果密钥丢失, computeIfAbsent 返回计算值,而 putIfAbsent 返回空值。 差异#3 这两种方法都将“不存在”定义为缺少键或现有值为空,但是: computeIfAbsent 如果密钥不存在,则不会输入空值。
2.putIfAbsent putIfAbsent如果传入key对应的value已经存在,就返回存在的value,不进行替换。如果不存在,就添加key和value,返回null @Testpublicvoidtest3(){ Map map=newHashMap(); map.put(1, "AA"); map.put(2, "BB"); map.put(3, "CC"); ...
put(K,V) - 将键K和值V的关联插入到map中。如果键已经存在,则新值将替换旧值。 putAll() - 将指定Map集合中的所有条目插入此Map集合中。 putIfAbsent(K,V) - 如果键K尚未与value关联,则插入关联V。 get(K) - 返回与指定键K关联的值。如果找不到该键,则返回null。 getOrDefault(K,defaultValue) - ...
这段代码使用了 Map 的 concurrent 形式(ConcurrentMap、ConcurrentHashMap),并简单的使用了语句map.putIfAbsent(key, locale) 。这同样不能保证相同的 key 返回同一个 Locale 对象引用。 这里的错误出在忽视了 putIfAbsent 方法是有返回值的,并且返回值很重要。