2014
02
18

[轉貼]Java之ArrayList和Vector的區別,HashMap和Hashtable的區別

關鍵字:JavaListSetMapHashMapHashtableVector

ArrayList 和HashMap是非同步的,Vector和HashTable是同步的,所以Vector和HashTable是線程安全的,而ArrayList和 HashMap並不是線程安全的。因為同步需要花費機器時間,所以Vector和HashTable的執行效率要低於ArrayList和 HashMap。
詳細說明,請參考:http://blog.csdn.net/yzw2013/article/details/18075187

其他說明:原文轉貼http://www.xuebuyuan.com/1224801.html

Hashtable與HashMap的區別:
Hashtable是基於陳舊的Dictionary的子類;HashMap是Java1.2引進的Map介面的一個實現類。

Hashtable中的方法是同步的,線程安全的;而HashMap中的方法在缺省情況下是非同步的。即是說,在多線程應用程式中,不用專門的操作就安全地可以使用Hashtable了;而對於HashMap,則需要額外的同步機制。但HashMap的同步問題可通過Collections的一個靜態方法得到解決:Map Collections.synchronizedMap(Map m);使用如下:Map map=Collections.synchronizedMap(new HashMap())。這個方法返回一個同步的Map,這個Map封裝了底層的HashMap的所有方法,使得底層的HashMap即使是在多線程的環境中也是安全的。

在HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null值時,即可以表示HashMap中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵,而應該用containsKey()方法來判斷。而Hashtable中不允許null值。

ArrayList與Vector的區別:
安全、效率方面:如果要實現同步安全,則要用Vector和Hashtable,否則則用ArrayList和HashMap,因為ArrayList和HashMap不考慮同步安全的問題,所以效率要高些。但Collections類可以解決這個問題。Collections.synchronizedList Collections.synchronizedMap

資源方面:當兩者的容量已滿時,它們都會自動增長其容量,但Vector是按其容量的一倍增長,而ArrayList則按其容量的50%增加,所以Vector更能節省資源。
迭代器:Vector和Hashtable使用Enumeration,ArrayList和HashMap使用Iterator

Vector,ArrayList和Hashtable,HashMap的區別:
Vector和ArrayList是數值聯繫物件。按照插入的順序進行排列,可以有重複值。
Hashtable和HashMap是物件聯繫物件。按照自己的排列方式進行排序,不可以有重複值。
傑立資訊傑立資訊事業有限公司

電話:(02)2739-9096 | 傳真:(02)2739-6637 | 客服:service@julyinfo.com | 臺北市大安區和平東路3段257號6樓map

© 2016 傑立資訊 All rights reserved.法律顧問:宇恒法律事務所