arraylist和hsahset的區(qū)別?
在Java 2以前,一般使用hashtable來映射鍵值和元素。為了使用Java集合框架,Java對Hashtable進(jìn)行了重新設(shè)計,但是,為了向后兼容保留了所有的方法。Hashtable實現(xiàn)了Map接口,除了Hashtable具有同步功能之外,它與hashmap的用法是一樣的。·在使用時一般是用ArrayList代替Vector,LinkedList代替Stack,HashMap代替HashTable,即使在多線程中需要同步,也是用同步包裝類。另外在使用上還有一些小的差異,比如:
HashTable的key和value都不允許為null值,而HashMap的key和value則都是允許null值的。這個其實沒有好壞之分,只是Sun為了統(tǒng)一Collection的操作特性而改進(jìn)的。HashTable有一個contains(Object value)方法,功能上與containsValue(Object value)一樣,但是在實現(xiàn)上花銷更大,現(xiàn)在已不推薦使用。而HashMap只有containsValue(Object value)方法。HashTable使用Enumeration,HashMap使用Iterator。Iterator其實與Enmeration功能上很相似,只是多了刪除的功能。用Iterator不過是在名字上變得更為貼切一些。模式的另外一個很重要的功用,就是能夠形成一種交流的語言(或者說文化)。有時候,你說Enumeration大家都不明白,說Iterator就都明白了。在實現(xiàn)上兩者已有一些差異,這里簡單說明一下:HashTable中構(gòu)造hash數(shù)組時initialCapacity默認(rèn)大小是11,增加的方式是 old*2+1。HashMap中構(gòu)造hash數(shù)組時initialCapacity默認(rèn)大小是16,而且一定是2的指數(shù)。對于哈希值的使用也有所不同,HashTable直接使用對象的hashCode,代碼是這樣的:而HashMap重新計算hash值,而且用與代替求模:上一篇決策樹是什么