集合只是唯一對象的集合。唯一意味著沒有兩個對象可以具有相同的值。根據集合的實施,它可能會或可能不會被訂購。Java 集作為抽像數據類型 (ADT),有幾個關鍵操作(其中 T 代表任何數據類型,例如 int、String 或任何類對象):
boolean add(T item)
:如果該項目已成功添加到集合中,則返回 true,如果該項目已經在集合中,則返回 false。boolean remove(T item)
:如果該項目已成功從集合中刪除,則返回 true,否則返回 false(如果該項目不在集合中)。boolean contains(T item)
:如果該項目在集合中則返回 true,否則返回 false。boolean isEmpty()
:如果集合為空則返回真,否則返回假。
contains()
函數為此提供了很好的運行時間:O(1) 或 O(log n) 時間複雜度取決於所使用的實現是 aHashSet
還是 aTreeSet
, 分別。那麼集合可以用來做什麼呢?好吧,如果您需要跟踪許多不同的對象(例如 ID、名稱或其他唯一標識符)並經常檢查此類集合中是否存在某個項目,那麼集合可能是一個不錯的選擇。這是一個集合的示例用例:假設您有一個Student
對象列表,代表給定班級中的所有學生。對於這個類,每個人都Student
可能有一個唯一的名稱(字符串)和等級(整數)。如果您想經常引用所有 A 學生(成績 >=90)的列表,那麼循環遍歷此列表並每次檢查每個學生的成績會很乏味。相反,您可以使用一個HashSet
字符串來跟踪班級中的所有 A 學生,如下所示:
- 每次更新學生的成績,您可以簡單地檢查學生的新成績是否大於或等於90。
- 如果是這樣,將他們添加到一組 A 學生中使用
add()
- 如果他們已經是 A 學生,則此操作將被忽略。
- 如果不是,則使用
remove()
- 如果此時他們不是 A 學生,則此操作將被忽略。
- 如果是這樣,將他們添加到一組 A 學生中使用
contains(“Johnny Appleseed”)
片場輕鬆實現。當然,這只是一組用例的一個示例,跟踪 A 學生的這一具體問題可以通過其他方式解決。
實現:Java 中的 HashSet 和 Java TreeSet 示例
HashSet
in Java 和in Java都TreeSet
來自java.utils package
. 您可以這樣導入它們:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
或者
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
JavaHashSet
和 Java之間的主要區別TreeSet
在於 theTreeSet
是排序的,而 theHashSet
不是。這就是為什麼TreeSet
關鍵操作的時間複雜度為 O(log n),而HashSet
時間複雜度為 O(1) 或常數;必須TreeSet
時刻維持秩序。除了前面提到的鍵集操作之外,Java 中的 和HashSet
都有TreeSet
一些其他有用的功能:
void clear()
:清除所有對象的集合。int size()
:返回集合中的對像數。Object clone()
:返回集合的淺表副本。Iterator iterator()
:返回集合的迭代器,從第一個對像開始。
size()
如果您想查看有多少“A”學生,或者clear()
如果您想在學期結束時清除列表,您可以調用。您可能會clone()
在特定時間點創建並保留 A 學生列表的副本,例如在期中報告期間(這樣副本就不會與原始版本保持同步)。
Java 哈希集示例
這是在 Java 中使用的 aHashSet
of的一個簡短示例:String
import java.util.HashSet;
class HashSetDemo {
public static void main(String[] args)
{
// create a HashSet of Strings
HashSet<String> hs = new HashSet<String>();
// Add elements using the add() method
hs.add("Collin");
hs.add("Bob");
hs.add("Abigail");
// Duplicates will ignored; this statement is useless
hs.add("Collin");
System.out.println(hs);
System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
System.out.println("Max is in the set (T/F): " + hs.contains("Max"));
}
}
輸出: - - - -
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Java 樹集示例
Java set example可以幫助你理解這個理論。這是在 Java 中使用的 aTreeSet
of的簡短示例:String
import java.util.TreeSet;
class TreeSetDemo {
public static void main(String[] args)
{
// create a TreeSet of Strings
TreeSet<String> ts = new TreeSet<String>();
// Add elements using the add() method.
ts.add("Collin");
ts.add("Bob");
ts.add("Abigail");
// Duplicates will ignored; this statement is useless
ts.add("Collin");
// printing the set prints the names in alphabetical order!
System.out.println(ts);
System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
System.out.println("Size of the set: " + ts.size());
ts.clear();
System.out.println("Size of the set after clear(): " + ts.size());
}
}
輸出: - - - -
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
就這樣!希望這有幫助😊