CodeGym/Java Blog/Toto sisi/Java 集作為接口
John Squirrels
等級 41
San Francisco

Java 集作為接口

在 Toto sisi 群組發布
個成員
集合只是唯一對象的集合。唯一意味著沒有兩個對象可以具有相同的值。根據集合的實施,它可能會或可能不會被訂購。Java 集作為抽像數據類型 (ADT),有幾個關鍵操作(其中 T 代表任何數據類型,例如 int、String 或任何類對象): 作為接口的 Java Set - 1
  • boolean add(T item):如果該項目已成功添加到集合中,則返回 true,如果該項目已經在集合中,則返回 false。
  • boolean remove(T item):如果該項目已成功從集合中刪除,則返回 true,否則返回 false(如果該項目不在集合中)。
  • boolean contains(T item):如果該項目在集合中則返回 true,否則返回 false。
  • boolean isEmpty():如果集合為空則返回真,否則返回假。
Java 中的集合具有非常不言自明的函數簽名(它們應該如此)。如果將兩個相同的項目添加到集合中,則只有第一個添加的項目會出現在集合中。除非首先刪除該項目,否則所有後續添加同一項目的嘗試都將被忽略。最常用的集合操作之一是檢查某項是否在給定集合中。該contains()函數為此提供了很好的運行時間:O(1) 或 O(log n) 時間複雜度取決於所使用的實現是 aHashSet還是 aTreeSet, 分別。那麼集合可以用來做什麼呢?好吧,如果您需要跟踪許多不同的對象(例如 ID、名稱或其他唯一標識符)並經常檢查此類集合中是否存在某個項目,那麼集合可能是一個不錯的選擇。這是一個集合的示例用例:假設您有一個Student對象列表,代表給定班級中的所有學生。對於這個類,每個人都Student可能有一個唯一的名稱(字符串)和等級(整數)。如果您想經常引用所有 A 學生(成績 >=90)的列表,那麼循環遍歷此列表並每次檢查每個學生的成績會很乏味。相反,您可以使用一個HashSet字符串來跟踪班級中的所有 A 學生,如下所示:
  • 每次更新學生的成績,您可以簡單地檢查學生的新成績是否大於或等於90。
    • 如果是這樣,將他們添加到一組 A 學生中使用add()
      • 如果他們已經是 A 學生,則此操作將被忽略。
    • 如果不是,則使用remove()
      • 如果此時他們不是 A 學生,則此操作將被忽略。
使用這樣的系統,您將始終擁有班級中所有“A”學生的最新集合。如果您想檢查 Johnny Appleseed 是否在您的班級表現出色,您可以通過拜訪contains(“Johnny Appleseed”)片場輕鬆實現。當然,這只是一組用例的一個示例,跟踪 A 學生的這一具體問題可以通過其他方式解決。

實現:Java 中的 HashSet 和 Java TreeSet 示例

HashSetin 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():返回集合的迭代器,從第一個對像開始。
您可以想像在“A 學生列表”示例中找到這些功能的用途:size()如果您想查看有多少“A”學生,或者clear()如果您想在學期結束時清除列表,您可以調用。您可能會clone()在特定時間點創建並保留 A 學生列表的副本,例如在期中報告期間(這樣副本就不會與原始版本保持同步)。

Java 哈希集示例

這是在 Java 中使用的 a HashSetof的一個簡短示例: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 中使用的 a TreeSetof的簡短示例: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
就這樣!希望這有幫助😊
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言