集合只是唯一对象的集合。唯一意味着没有两个对象可以具有相同的值。根据集合的实施,它可能会或可能不会被订购。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”)
如果您想检查 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
就这样!希望这有帮助😊
GO TO FULL VERSION