數據元素相互之間的關係稱為結構。有四類基本結構:集合、線性結構、樹形結構、圖狀結構;
集合結構:除了同屬於一種類型外,別無其它關係。
線性結構:元素之間存在一對一關係常見類型有: 數組,鍊表,隊列,棧,它們之間在操作上有所區別.例如:鍊表可在任意位置插入或刪除元素,而隊列在隊尾插入元素,隊頭刪除元素,棧只能在棧頂進行插入,刪除操作.
樹形結構:元素之間存在一對多關係,常見類型有:樹(有許多特例:二叉樹、平衡二叉樹、查找樹等)
圖形結構:元素之間存在多對多關係,圖形結構中每個結點的前驅結點數和後續結點多個數可以任意
Java中有幾種常用的數據結構,主要分為Collection和Map兩個主要接口,而程序中最終使用的數據結構是繼承自這些接口的數據結構類。其主要關係:
1、幾個常用類的區別:
1.ArrayList: 元素單個,效率高,多用於查詢
2.Vector: 元素單個,線程安全,多用於查詢
3.LinkedList:元素單個,多用於插入和刪除
4.HashMap: 元素成對,元素可為空
5.HashTable: 元素成對,線程安全,元素不可為空
二、Vector、ArrayList和LinkedList
大多數情況下,從性能上來說ArrayList最好,但是當集合內的元素需要頻繁插入、刪除時LinkedList會有比較好的表現,但是它們三個性能都比不上數組,另外Vector是線程同步的。所以:
如果能用數組的時候(元素類型固定,數組長度固定),請儘量使用數組來代替List;
如果沒有頻繁的刪除插入操作,又不用考慮多線程問題,優先選擇ArrayList;
如果在多線程條件下使用,可以考慮Vector;
如果需要頻繁地刪除插入,LinkedList就有了用武之地;
如果你什麼都不知道,用ArrayList沒錯。
三、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表示。
最後,開發這麼多年我也總結了一套學習Java的資料與面試題,如果你在技術上面想提升自己的話,可以關注我,私信發送領取資料或者在評論區留下自己的聯繫方式,有時間記得幫我點下轉發讓跟多的人看到哦。