1. 程式人生 > >HashMap、HashSet、Hashtable key/value終極總結

HashMap、HashSet、Hashtable key/value終極總結

hashset shm put false 終極 ron AS 不同的 可變

涉及到Hash,即通過Key的哈希值,存取對應value。

註意,同一個key的哈希值必須唯一,不可變。

1、HashMap,key為null時,存在tab[0]中。

value可為空,key的hash不同的話,可存多個。

2、HashSet,采用HashMap,add(value)即采用HashMap的put(value, false)方法,

就是將value作為HashMap的key存入。可存null,只能存一個。

3、Hashtable,多線程安全,synchronized修飾,底層采用map.entry,

源碼:value為null都為拋異常。key為null,取其hash為報錯。

原因:因為可能涉及多線程,如果value為null,另一個線程取值,就不知道是取到還是沒取到。

當然,另一個線程安全的CurrentHashMap,key或者value為null,都不可。原因同Hashtable。

HashMap、HashSet、Hashtable key/value終極總結