資料結構是計算機儲存,組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或儲存效率。資料結構往往同高效的檢索演算法和索引技術有關
java中常見的幾種資料結構(也是初級工程師常見面試題)主要是一些常見的容器,它們主要來自於Collection和Map這2個集合;以下是2個集合的總體框架
(1)Collection介面圖
(2)map介面圖
上述2個圖片分別來自於
下面我將每一個介面或類進行詳細介紹,其中他們所擁有的方法就不介紹了,可以自行查API,另外,很多方法也不會用到,常見的方法就那麼幾個。
1.Collction:
Collection介面繼承自超級介面Iterator,是Collection層次結構中的根介面。Collection表示一組物件,這些物件也被稱為Collection的元素。一些Collection允許有重複的元素(例如List),但是另一些則不允許有重複的元素,即可為無序的(如Set)。JDK不提供此介面的任何直接實現---它會提供更為具體的子介面(如Set和List),這從上面的UML也可以看出來。此介面用來傳遞Collection,並在需要最大普遍性的地方操作這些Collection。其實現類的底層是由陣列或者連結串列組成,陣列是通過首地址+(元素長度*下標),即通過下標查詢的,因此查詢速度快,而增刪慢(在增刪的時候,陣列需要整體的移動,所以慢);連結串列不維護序號,即連結串列不存在下標的概念,**所以查詢很慢(通過地址查詢的),而增刪快(直接通過地址刪掉某一個元素,其它元素不需要移動)
陣列:查詢快,增刪慢;連結串列:查詢慢,增刪快
1.1.List:有序,可重複
ArrayList :底層是陣列結構,執行緒不安全。查詢快,增刪慢
LinkedList :底層是連結串列結構,執行緒不安全。查詢慢,增刪快
Vector:底層是陣列結構,是執行緒安全的,所以效率很低,已經被ArrayList取代
1.2.Set :無序,不可重複
HashSet類 及其實現類LinkedHashSet:底層是使用了雜湊表來支援的,特點: 存取速度快,執行緒不安全,集合元素允許為NULL
SortedSet介面及其實現類TreeSet:如果元素具備自然順序 的特性,那麼就按照元素自然順序的特性進行排序儲存。
1.3.EnumSet
EnumSet類是專為列舉類設計的集合類,EnumSet中的所有元素都必須是指定列舉型別的列舉值
2.Map
Map用於儲存具有對映關係的資料,因此Map集合裡儲存著兩組值,一組值用於儲存Map裡的key,另外一組用於儲存Map裡的value,key和value都是可以任意引用型別的資料。Map的key不允許重複,即同一個Map物件的任何兩個key通過equals方法比較總是返回false. 給key-value起個名字:Entry,表示一個鍵值對,對應Map的一個實體;把Entry放到集合set中就是一個Map 如果把Map所有value放在一起來看,元素與元素之間可以重複,每個元素可以根據索引來查詢,相當於list集合,只是Map中的索引不再使用整數值,而是以另外一個物件作為索引。如果需要從List集合中取出元素,需要提供該元素的數字索引。 如果需要從Map中取出元素,需要提供該元素的key索引,因此,Map也被稱為字典。
常見的實現類:
2.1.HashMap:
採用雜湊表演算法, 此時Map中的key不會保證新增的先後順序,key也不允許重複.key判斷重複的標準是: key1和key2是否equals為true,並且與hashCode相等.其中實現類LinkedHashMap採用了連結串列和雜湊表演算法
2.2.TreeMap:
sortedMap介面的實現類,採用紅黑樹演算法,此時Map中的key會按照自然順序或定製排序進行排序,,key也不允許重複.key判斷重複的標準是: compareTo/compare的返回值是否為0.
2.3.Hashtable:
採用雜湊表演算法,是HashMap的前身(類似於Vector是ArrayList的前身).打死不用. 在Java的集合框架之前,表示對映關係就使用Hashtable.所有的方法都使用synchronized修飾符,執行緒安全的,但是效能相對HashMap較低.其子類Properties要求key和value都是String型別.
本文摘自: