java 中幾種經常使用數據結構
Java中有幾種經常使用的數據結構,主要分爲Collection和map兩個主要接口(接口只提供方法,並不提供實現),而程序中最終使用的數據結構是繼承自這些接口的數據結構類。java
1、幾個經常使用類的區別
1.ArrayList: 元素單個,效率高,多用於查詢
2.Vector: 元素單個,線程安全,多用於查詢
3.LinkedList:元素單個,多用於插入和刪除
4.HashMap: 元素成對,元素可爲空
5.HashTable: 元素成對,線程安全,元素不可爲空
2、Vector、ArrayList和LinkedList
大多數狀況下,從性能上來講ArrayList最好,可是當集合內的元素須要頻繁插入、刪除時LinkedList會有比較好的表現,可是它們三個性能都比不上數組,另外Vector是線程同步的。因此:
若是能用數組的時候(元素類型固定,數組長度固定),請儘可能使用數組來代替List;
若是沒有頻繁的刪除插入操做,又不用考慮多線程問題,優先選擇ArrayList;
若是在多線程條件下使用,能夠考慮Vector;
若是須要頻繁地刪除插入,LinkedList就有了用武之地;
若是你什麼都不知道,用ArrayList沒錯。
3、Collections和Arrays
在Java集合類框架裏有兩個類叫作Collections(注意,不是Collection!)和Arrays,這是JCF裏面功能強大的工具,但初學者每每會忽視。按JCF文檔的說法,這兩個類提供了封裝器實現(Wrapper Implementations)、數據結構算法和數組相關的應用。
想必你們不會忘記上面談到的「折半查找」、「排序」等經典算法吧,Collections類提供了豐富的靜態方法幫助咱們輕鬆完成這些在數據結構課上煩人的工做:
binarySearch:折半查找。
sort:排序,這裏是一種相似於快速排序的方法,效率仍然是O(n * log n),但倒是一種穩定的排序方法。
reverse:將線性表進行逆序操做,這個但是從前數據結構的經典考題哦!
rotate:以某個元素爲軸心將線性表「旋轉」。
swap:交換一個線性表中兩個元素的位置。
……
Collections還有一個重要功能就是「封裝器」(Wrapper),它提供了一些方法能夠把一個集合轉換成一個特殊的集合,以下:
unmodifiableXXX:轉換成只讀集合,這裏XXX表明六種基本集合接口:Collection、List、Map、Set、SortedMap和SortedSet。若是你對只讀集合進行插入刪除操做,將會拋出UnsupportedOperationException異常。
synchronizedXXX:轉換成同步集合。
singleton:建立一個僅有一個元素的集合,這裏singleton生成的是單元素Set,
singletonList和singletonMap分別生成單元素的List和Map。
空集:由Collections的靜態屬性EMPTY_SET、EMPTY_LIST和EMPTY_MAP表示。web