1.容器和集合

容器或集合是允許您同時存儲和處理多個對象的類。您已經知道兩種容器:數組和列表。

Java 有幾十個集合,每個集合都以自己特定的方式存儲元素。這裡有幾個:

收藏 班級 描述
List
ArrayList
列表
LinkedList
鍊錶
Vector
向量
Stack
Set
HashSet
TreeSet
LinkedHashSet
Queue
PriorityQueue
隊列
ArrayQueue
Map
HashMap
地圖/字典
TreeMap
HashTable

這裡的名字有些模棱兩可。在大多數編程語言中,所有這些數據結構都稱為集合,但在 Java 中不是。在 Java 中,其中一些類實現了Collection接口,而另一些則沒有。

相應地,集合又分為廣義集合和狹義集合(僅實現了Collection接口的集合)。

因此,為避免混淆,當我們談到集合時,我們指的是狹義的詞,即實現Collection接口的類。List,Set和類型Queue都是集合。廣義上的集合一般稱為容器。這些包括類型Map和數組。


2.HashSet收藏

該類HashSet是一個典型的集合。在許多方面,它與類相似ArrayList。在某些方面,它是一個更原始的版本。

您可以HashSet使用如下語句創建對象:

HashSet<Type> name = new HashSet<Type>();

Type我們將存儲在集合中的元素的類型在哪裡HashSet

該類HashSet有這樣的方法:

方法 描述
void add(Type value)
將元素添加value到集合中
boolean remove(Type value)
value從集合中移除元素。
返回true是否存在這樣的元素
boolean contains(Type value)
檢查集合是否有value元素
void clear()
清除集合,刪除所有元素
int size()
返回集合中元素的數量

這是使用集合的示例。

讓我們編寫一個程序,如果他或她打招呼,就向用戶說再見。為了讓它更有趣,我們將讓我們的程序能夠理解多種語言的“你好”。

代碼 筆記
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
創建一個HashSet存儲String元素的對象。


我們將各種語言的問候語添加到set變量中。




從控制台讀取一行。


如果字符串在我們的問候語中,那麼我們說再見。


3.設置

Set系列旨在容納一組元素。這就是為什麼它被稱為Set(集合)。這個集合具有三個特點。

集合上的操作

您只能對集合做三件事:向集合中添加元素、從集合中刪除元素以及檢查集合是否包含特定元素。就是這樣。

沒有訂單

此集合中的元素沒有索引。您無法通過索引獲取元素,也無法將值寫入特定索引處的集合。集合沒有get()set()方法。

獨特元素

集合中的所有元素都是唯一的。與列表不同,集合只能包含一個元素的一個實例。一個對像要麼在集合中,要么不在集合中——沒有第三種選擇。您不能將黑色三次添加到一組顏色中。它要么存在要么不存在。

查找元素

當您添加新元素、刪除元素或檢查元素是否存在於集合中時,將在該方法中執行對元素的搜索。傳遞的元素首先通過 與集合的元素進行比較hashCode(),然後如果匹配返回的值hashCode(),則通過equals()



4.比較集合:ListvsSet

List讓我們比較兩種類型的收藏:Set我們將看看主要區別,一種比另一種更有優勢,反之亦然。

讓我們嘗試以玩具為例來比較 List 和 Set。

List(列表)集合就像一組玩具,沿著遊戲室的牆壁排列。您可以將玩具添加到列表的末尾。如果實在需要,也可以插在中間(但有些已有的玩具就得搬了)。

每個玩具都有一個索引。您可以通過索引引用玩具,也可以將 7 號玩具替換為 13 號玩具。您可以從列表中刪除 4 號玩具。最後,您可以了解列表中每個玩具的索引。

Set(set) 集合更像是地板中間的一堆玩具。您可以向堆中添加一個玩具,也可以從堆中取出一個玩具。但是這些玩具沒有與之相關的固定索引。

或者假設您正在為孩子的生日選擇玩具。首先,您要考慮他是否已經擁有玩具。他已經擁有的所有玩具組成了一套你不會選擇購買的玩具。

從這個角度來看,您可以看到一組“已經存在的玩具”中玩具的順序無關緊要,生日男孩是否擁有特定玩具的兩個實例也無關緊要。您對每個玩具的順序或數量不感興趣。您關心的是了解套裝中存在的每個獨特玩具。

對於這種情況,您需要Set集合。它最流行的實現是HashSet類。