Vector和ArrayList
1、vector是線程同步的,所以他也是線程安全的,而ArrayList是線程異步的,是不安全的。如果不考慮到線程的安全因素,一般用ArrayList效率較高。
2、如果集合中的元素的數目大於目前集合數組的長度時,Vector增長率為目前數組長度的100%,而ArrayList增長率為目前數組長度的50%.如果在集合中使用數據量比較大的數據,用vector有一定的優勢。
3、如果查找一個制定位置的數據,vector和ArrayList使用的時間是相同的,都是0(1),這個時候使用vector和ArrayList都可以。而如果移動一個指定位置的數據花費的時間為0(n-i)n為總長度,這個時候就應該考慮使用LinkList,因為它移動一個指定位置的數據所花費的時間為0(1),而查找一個指定位置的數據時花費的時間為0(i)。
ArrayList和Vector是采用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,都允許直接序號索引元素,但是插入數據要設計到數組元素的移動等內存操作,所以索引數據快插入數據慢,Vector由於使用了synchronized方法(線程安全)所以性能上比ArrayList要差,LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行向前或者向后遍歷,但是插入數據時只需要記錄本想的前后項即可,所以插入速度比較快!
ArrayList和LinkedList
1、ArrayList是實現了基本動態數據機構,LinkedList基本鏈表的數據結構。
2、對於隨機訪問get和set,ArrayList絕對優於LinkedList,因為LinkedList是要移動指針。
3、對於新增和刪除操作add和remove,LinkedList比較占優勢,因為ArrayList要移動數據。
這一點要看實際情況的。若只對單條數據插入或刪除,ArrayList的速度反而由於LinkedList。但是批量隨機插入和刪除數據,LinkedList的速度大大優於ArrayList,因為ArrayList每插入一條數據,都要移動插入點及之后的所有數據。
HashMap和TreeMap
1、HashMap通過hashcode對其內容進行快速查找,而TreeMap中所有的元素都保持着某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。
HashMap中元素的排列順序是不固定的)。
2、 HashMap通過hashcode對其內容進行快速查找,而TreeMap中所有的元素都保持着某種固定的順序,如果你需要得到一個有序的結果你就應該 使用TreeMap(HashMap中元素的排列順序是不固定的)。集合框架”提供兩種常規的Map實現:HashMap和TreeMap (TreeMap實現SortedMap接口)。
3、在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。使用HashMap要求添加的鍵類明確定義了hashCode()和 equals()的實現。 這個TreeMap沒有調優選項,因為該樹總處於平衡狀態。
結過研究,在原作者的基礎上我還發現了一點,二樹map一樣,但順序不一樣,導致hashCode()不一樣。
同樣做測試:
在hashMap中,同樣的值的map,順序不同,equals時,false;
而在treeMap中,同樣的值的map,順序不同,equals時,true,說明,treeMap在equals()時是整理了順序了的。
HashTable和HashMap
1、歷史原因:HashTable是基於陳舊的Dictionary類得,HashMap是Java1.2引進的Map接口的一個實現。
2、同步性:HashTable是線程安全的,也就是說是同