putIfAbsent】的更多相关文章

转自:http://blog.csdn.net/exceptional_derek/article/details/40384659 先看一段代码: public class Locale { private final static Map<String, Locale> map = new HashMap<String,Locale>(); public static Locale getInstance(String language, String country, Str…
put与putIfAbsent区别: put在放入数据时,如果放入数据的key已经存在与Map中,最后放入的数据会覆盖之前存在的数据, 而putIfAbsent在放入数据时,如果存在重复的key,那么putIfAbsent不会放入值. 1.put @Test public void test3(){ Map map = new HashMap(); map.put(1, "AA"); map.put(2, "BB"); map.put(3, "CC&quo…
public V putIfAbsent(@NotNull K key, @NotNull V value) putIfAbsent方法主要是在向ConcurrentHashMap中添加键—值对的时候,它会先判断该键值对是否已经存在. 如果不存在(新的entry),那么会向map中添加该键值对,并返回null. 如果已经存在,那么不会覆盖已有的值,直接返回已经存在的值. 相当于: V v = map.get(key); if (v == null) v = map.put(key, value)…
源码中传入key和value,根据key获取看是否存在value,如果value==null,然后调用put方法把传入的key和value  put进map,返回根据key获取的老value 意思就是:putIfAbsent   如果传入key对应的value已经存在,就返回存在的value,不进行替换.如果不存在,就添加key和value,返回null 来自:https://blog.csdn.net/Mint6/article/details/78352449…
public static HashSet<Long> getOrInitHashMapCacheValue(Long mId){ // HashSet<Long> set = getHashMapRefCache().get(mId); // if(set == null){ // set = getHashSet(); // getHashMapRefCache().put(mId, set); // } // return set; HashSet<Long> s…
putIfAbsent 源代码 public V putIfAbsent(K key, V value) { Segment<K,V> s; if (value == null) throw new NullPointerException(); int hash = hash(key); int j = (hash >>> segmentShift) & segmentMask; if ((s = (Segment<K,V>)UNSAFE.getObje…
ConcurrentMap.putIfAbsent(key,value) 用法讨论 http://wxl24life.iteye.com/blog/1746794…
这个方法在key不存在的时候加入一个值,如果key存在就不放入,等价: if (!map.containsKey(key)) return map.put(key, value); else return map.get(key); 测试代码: public class Test { public static void main(String[] args) { ConcurrentHashMap<String,String> map=new ConcurrentHashMap<Str…
原文:https://blog.csdn.net/k3108001263/article/details/83720445 如果不存在key,则添加到HashMap中,跟put方法相似 如果存在key,则不会覆盖,HashMap不受影响,而put方法会覆盖更新 import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) throws Excep…
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填一次. 思路:大概看了线程相关的一些知识,对线程的运行机制,同步机制,以及整个系统都做一个全面的了解.在深入每一个部分去看一下线程及其相关包的源码做深入了解. 目标:线程,并发包(线程池,并发的数据结构,锁,原子类). 通过一些资料的查看最终把目标定位在线程和并发包上,线程是核心,并发包是辅助工具,…