put方法,有以下代碼安全
Map<String,String> map = new HashMap<String,String>(); map.put("name","張三"); System.out.println(map.put("name","李四"));
輸出的是「張三」線程
Map<String,String> map = new HashMap<String,String>(); System.out.println(map.put("name","李四"));
輸出的是nullcode
HashMap的put方法返回的是舊值(若是有)或者null對象
HashMap的key是惟一的,怎麼保證惟一呢?hash
首先,在put key的時候,會先比較key的hashcode:io
一、若是此hashcode在map中沒有,那說明沒有重複的,能夠直接放入,value的話,直接放入table
二、若是此hashcode在map中有了,那麼會比較equals,若是equals結果是相等的話,說明重複,value會覆蓋掉舊值,若是equals結果是不相等,那說明不重複,value直接放入效率
經過上面咱們能夠推斷出,hashcode和equals之間的關係map
兩個對象之間,hashcode相等的話,不必定相等,若是equals相等了,那必定是相等的方法
也就是說,不一樣對象的hashcode也多是相等的哦(hash碰撞)
這也說明了爲何咱們本身寫的bean若是要覆蓋equlas則必需要覆蓋hashcode
最後,HashMap不是線程安全的,HashTable是線程安全的,可是效率低。那麼如何獲得一個線程安全的HashMap呢?
三種方法,以下
Map map1 = new Hashtable(); Map map2 = Collections.synchronizedMap(new HashMap<>()); Map map3 = new ConcurrentHashMap<>();
它們的效率是依次增高的