List介面和Set介面及其常用實現類概述

2022-09-12 03:06:10 字數 2188 閱讀 4465

list:有序的 collection(也稱為序列)。此介面的使用者可以對列表中每個元素的插入位置進行精確地控制。使用者可以根據元素的整數索引(在列表中的位置)訪問元素,並搜尋列表中的元素。 list介面:有序的、允許多個null元素、具體實現常用的有arraylist、vector、linkedlist常用實現類有arraylist、vector、linkedlist

arraylist定義及特點

public class arraylist extends abstractlist implements list, randomaccess, cloneable, serializable

實現原理,採用動態物件陣列實現,預設構造方法建立了乙個空陣列

第一次新增元素,擴充套件容量為10,之後的擴充演算法:原來的陣列大小+原陣列大小的一半

不適合進行刪除或插入操作

為了防防止陣列動態擴充次數過多,建議在建立時給定初始容量

執行緒不安全,適合在單執行緒使用,效率較高

vector定義及特點

public class vector extends abstractlist implements list, randomaccess, cloneable, serializable

實現原理,採用動態陣列實現,預設構造方法建立了乙個大小為10的物件陣列

擴充的演算法:當增量為0時,擴充為原來大小的兩倍,當增量大於0時,擴充為原來大小+增量

不適合刪除或插入操作

為了防防止陣列動態擴充次數過多,建議在建立時給定初始容量

執行緒安全,適合在多執行緒訪問時使用,效率較低

linkedlist定義及特點

public class linkedlist extends abstractsequentiallist implements list, deque, cloneable, serializable

實現原理,採用雙向鍊錶結構實現

適合插入、刪除操作,效能高

在實際開發中,如何選擇list介面的具體實現?需要考慮的問題有:

乙個不包含重複元素的 collection。更確切地講,set 不包含滿足 e1.equals(e2) 的元素對 e1 和 e2,並且最多包含乙個 null 元素。常用的實現類有hashset、linkedhashset、treeset

hashset定義及特點

public class hashset extends abstractset implements set, cloneable, serializable

實現原理,基於雜湊表(hashmap)實現

不允許重複,最多可以有乙個null元素

不保證順序恆久不變

新增元素時把元素作為hashmap的key儲存,hashmap的value使用乙個固定的object物件

排除重複是通過equals方法來檢查物件是否相等

判斷兩個物件是否相同,先判斷兩個物件的hashcode是否相同(兩個物件的hashcode相等不一定是同乙個物件,但如果不同,一定不是同乙個物件),若不同,則兩個物件不是同乙個物件;若相同,還要進行equals判斷。equals方法返回true則為同乙個物件,返回false則不是同乙個物件。

自定義類存入hashset時,建議重寫類的hashcode和equals方法

雜湊表的儲存結構:陣列+鍊錶,陣列裡的每個元素以鍊錶的形式儲存

如何把物件儲存到雜湊表中?先計算物件的hashcode值再對陣列的長度求餘數,來決定物件要儲存在陣列中的哪個位置。

treeset定義及特點

public class treeset extends abstractset implements n**igableset, cloneable, serializable

linkedhashset定義及特點

public class linkedhashset extends hashset implements set, cloneable, serializable

具有可預知迭代順序的 set 介面的雜湊表和鏈結列表實現。此實現與 hashset 的不同之外在於,後者維護著乙個執行於所有條目的雙重鏈結列表。此鏈結列表定義了迭代順序,即按照將元素插入到set 中的順序(插入順序)進行迭代。注意,插入順序不 受在 set 中重新插入的 元素的影響。如果在 s.contains(e) 返回 true 後立即呼叫 s.add(e),則元素 e 會被重新插入到 set s 中。)

如何選擇set介面的具體實現?

原文:

List介面 Set介面和Map介面

1 list和set介面自collection介面,而map不是繼承的collection介面 collection表示一組物件,這些物件也稱為collection的元素 一些 collection允許有重複的元素,而另一些則不允許 一些collection是有序的,而另一些則是無序的 jdk中不提...

Set 介面常用子類及其特點

set 集合中元素不可重複,是無序的 存入和取出的順序是不一樣的 set 介面中的方法和 collection 介面一致.常用子類 treeset 可以對 set 集合中的元素進行排序,是不同步的.雜湊表如何確定元素是否相同?判斷兩個元素的雜湊值是否相同,其實判斷的是物件的 hashcode 方法 ...

Collection子介面 Set介面

1.儲存的資料特點 無序的 不可重複的元素 具體的以hashset為例說明 無序性 不等於隨機性。儲存的資料在底層陣列中並非照陣列索引的順序新增,而是根據資料的雜湊值決定的。不可重複性 保證新增的元素照equals 判斷時,不能返回true.即 相同的元素只能新增乙個。2.元素新增過程 以hashs...