1.容器和集合
容器或集合是允許您同時存儲和處理多個對象的類。您已經知道兩種容器:數組和列表。
Java 有幾十個集合,每個集合都以自己特定的方式存儲元素。這裡有幾個:
收藏 | 班級 | 描述 |
---|---|---|
|
|
列表 |
|
鍊錶 | |
|
向量 | |
|
堆 | |
|
|
放 |
|
||
|
||
|
|
隊列 |
|
||
|
|
地圖/字典 |
|
||
|
這裡的名字有些模棱兩可。在大多數編程語言中,所有這些數據結構都稱為集合,但在 Java 中不是。在 Java 中,其中一些類實現了Collection
接口,而另一些則沒有。
相應地,集合又分為廣義集合和狹義集合(僅實現了Collection
接口的集合)。
因此,為避免混淆,當我們談到集合時,我們指的是狹義的詞,即實現Collection
接口的類。List
,Set
和類型Queue
都是集合。廣義上的集合一般稱為容器。這些包括類型Map
和數組。
2.HashSet
收藏
該類HashSet
是一個典型的集合。在許多方面,它與類相似ArrayList
。在某些方面,它是一個更原始的版本。
您可以HashSet
使用如下語句創建對象:
HashSet<Type> name = new HashSet<Type>();
Type
我們將存儲在集合中的元素的類型在哪裡HashSet
。
該類HashSet
有這樣的方法:
方法 | 描述 |
---|---|
|
將元素添加value 到集合中 |
|
value 從集合中移除元素。返回 true 是否存在這樣的元素 |
|
檢查集合是否有value 元素 |
|
清除集合,刪除所有元素 |
|
返回集合中元素的數量 |
這是使用集合的示例。
讓我們編寫一個程序,如果他或她打招呼,就向用戶說再見。為了讓它更有趣,我們將讓我們的程序能夠理解多種語言的“你好”。
代碼 | 筆記 |
---|---|
|
創建一個HashSet 存儲String 元素的對象。我們將各種語言的問候語添加到 set 變量中。從控制台讀取一行。 如果字符串在我們的問候語中,那麼我們說再見。 |
3.設置
該Set
系列旨在容納一組元素。這就是為什麼它被稱為Set
(集合)。這個集合具有三個特點。
集合上的操作
您只能對集合做三件事:向集合中添加元素、從集合中刪除元素以及檢查集合是否包含特定元素。就是這樣。
沒有訂單
此集合中的元素沒有索引。您無法通過索引獲取元素,也無法將值寫入特定索引處的集合。集合沒有get()
和set()
方法。
獨特元素
集合中的所有元素都是唯一的。與列表不同,集合只能包含一個元素的一個實例。一個對像要麼在集合中,要么不在集合中——沒有第三種選擇。您不能將黑色三次添加到一組顏色中。它要么存在要么不存在。
查找元素
當您添加新元素、刪除元素或檢查元素是否存在於集合中時,將在該方法中執行對元素的搜索。傳遞的元素首先通過 與集合的元素進行比較hashCode()
,然後如果匹配返回的值hashCode()
,則通過equals()
。
4.比較集合:List
vsSet
List
讓我們比較兩種類型的收藏:Set
我們將看看主要區別,一種比另一種更有優勢,反之亦然。
讓我們嘗試以玩具為例來比較 List 和 Set。
List
(列表)集合就像一組玩具,沿著遊戲室的牆壁排列。您可以將玩具添加到列表的末尾。如果實在需要,也可以插在中間(但有些已有的玩具就得搬了)。
每個玩具都有一個索引。您可以通過索引引用玩具,也可以將 7 號玩具替換為 13 號玩具。您可以從列表中刪除 4 號玩具。最後,您可以了解列表中每個玩具的索引。
Set
(set) 集合更像是地板中間的一堆玩具。您可以向堆中添加一個玩具,也可以從堆中取出一個玩具。但是這些玩具沒有與之相關的固定索引。
或者假設您正在為孩子的生日選擇玩具。首先,您要考慮他是否已經擁有玩具。他已經擁有的所有玩具組成了一套你不會選擇購買的玩具。
從這個角度來看,您可以看到一組“已經存在的玩具”中玩具的順序無關緊要,生日男孩是否擁有特定玩具的兩個實例也無關緊要。您對每個玩具的順序或數量不感興趣。您關心的是了解套裝中存在的每個獨特玩具。
對於這種情況,您需要Set
集合。它最流行的實現是HashSet
類。
GO TO FULL VERSION