CodeGym/Java 博客/随机的/Java 集作为接口
John Squirrels
第 41 级
San Francisco

Java 集作为接口

已在 随机的 群组中发布
个会员
集合只是唯一对象的集合。唯一意味着没有两个对象可以具有相同的值。根据集合的实施,它可能会或可能不会被订购。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”学生的最新集合。contains(“Johnny Appleseed”)如果您想检查 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
就这样!希望这有帮助😊
评论
  • 受欢迎
你必须先登录才能发表评论
此页面还没有任何评论