在Java中,有几种不重复的集合(也称为Set),它们可以存储不重复的元素。这些集合是:
HashSet:这是一个基于哈希表的Set实现,它以O(1)的时间复杂度支持添加、删除和查询元素。它不保证元素的顺序,因为元素的存储位置是由元素的哈希值决定的。HashSet使用equals()和hashCode()方法来比较和计算元素的哈希值。
TreeSet:这是一个基于红黑树的Set实现,它以O(log n)的时间复杂度支持添加、删除和查询元素。它保证元素按照自然顺序或者自定义顺序排序。TreeSet使用compareTo()方法来比较元素。
LinkedHashSet:这是一个基于哈希表和链表的Set实现,它以O(1)的时间复杂度支持添加、删除和查询元素。它保证元素按照插入顺序排序,因为元素是通过链表链接的。LinkedHashSet使用equals()和hashCode()方法来比较和计算元素的哈希值。
下面是一些简单的示例,展示了如何使用这些集合:
import java.util.*;
public class SetExample {
public static void main(String[] args) {
// HashSet example
Set<String> hashSet = new HashSet<>();
hashSet.add("apple");
hashSet.add("banana");
hashSet.add("orange");
hashSet.add("apple"); // adding duplicate element
System.out.println("HashSet: " + hashSet);
// TreeSet example
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(5);
treeSet.add(3);
treeSet.add(8);
treeSet.add(3); // adding duplicate element
System.out.println("TreeSet: " + treeSet);
// LinkedHashSet example
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("apple");
linkedHashSet.add("banana");
linkedHashSet.add("orange");
linkedHashSet.add("apple"); // adding duplicate element
System.out.println("LinkedHashSet: " + linkedHashSet);
}
}
在上面的示例中,我们使用三个不同的集合类型:HashSet、TreeSet和LinkedHashSet来存储字符串或整数元素。我们尝试添加重复的元素,并打印每个集合来查看它们是否保留了不重复的元素。