關於java.util.Vector 或 java.util.Hashtable類過期的討論

某些高級IDE在檢測代碼成熟問題時,會報告集合是否過期的問題。目前過期的集合類有兩個java.util.Vector 和 java.util.Hashtable 。java

Vector的api描述是:從jdk 1.2版本開始,該類被修正爲實現List接口,併成爲Java Collection集合框架的一員,區別於其餘一些新的集合實現類,Vector是線程安全的。若是是一個線程安全的實現,推薦使用ArrayList代替Vector。編程

Hashtable的api描述是:從jdk 1.2版本開始,該類被修正爲實現List接口,併成爲Java Collection集合框架的一員,區別於其餘一些新的集合實現類,Hashtable是線程安全的。若是是一個線程安全的實現,推薦使用HashMap代替Hashtable。若是是高併發的線程安全的實現,推薦使用ConcurrentHashMap代替Hashtable。api

Vector和ArrayList區別 
Vector和ArrayList Vector和ArrayList在使用上很是類似,均可用來表示一組數量可變的對象應用的集合,而且能夠隨機地訪問其中的元素。  
Vector的方法都是同步的(Synchronized),是線程安全的(thread-safe),而ArrayList的方法不是,因爲線程的同步必然要影響性能,所以,ArrayList的性能比Vector好。 
當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增長50%的大小,這樣,ArrayList就有利於節約內存空間。數組

 
Hashtable和HashMap區別
Hashtable和HashMap它們的性能方面的比較相似 Vector和ArrayList,好比Hashtable的方法是同步的,而HashMap的不是。安全

 
ArrayList和LinkedList區別
對於處理一列數據項,Java提供了兩個類ArrayList和LinkedList,ArrayList的內部實現是基於內部數組Object[],因此從概念上講,它更象數組,但LinkedList的內部實現是基於一組鏈接的記錄,因此,它更象一個鏈表結構,因此,它們在性能上有很大的差異。  
從上面的分析可知,在ArrayList的前面或中間插入數據時,你必須將其後的全部數據相應的後移,這樣必然要花費較多時間,因此,當你的操做是在一列數據的後面添加數據而不是在前面或中間,而且須要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能 
而訪問鏈表中的某個元素時,就必須從鏈表的一端開始沿着鏈接方向一個一個元素地去查找,直到找到所需的元素爲止,因此,當你的操做是在一列數據的前面或中間添加或刪除數據,而且按照順序訪問其中的元素時,就應該使用LinkedList了。  
若是在編程中,1,2兩種情形交替出現,這時,你能夠考慮使用List這樣的通用接口,而不用關心具體的實現,在具體的情形下,它的性能由具體的實現來保證。 併發


配置集合類的初始大小  
在Java集合框架中的大部分類的大小是能夠隨着元素個數的增長而相應的增長的,咱們彷佛不用關心它的初始大小,但若是咱們考慮類的性能問題時,就必定要考慮儘量地設置好集合對象的初始大小,這將大大提升代碼的性能。 
好比,Hashtable缺省的初始大小爲101,載入因子爲0.75,即若是其中的元素個數超過75個,它就必須增長大小並從新組織元素,因此,若是你知道在建立一個新的Hashtable對象時就知道元素的確切數目如爲110,那麼,就應將其初始大小設爲110/0.75=148,這樣,就能夠避免從新組織內存並增長大小。框架

相關文章
相關標籤/搜索