Set接口及常用子类
java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。与 List 接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。
Set的常用方法
变量和类型 | 方法 | 描述 |
---|---|---|
boolean | add(E e) | 如果指定的元素尚不存在,则将其添加到此集合,重复的值会被覆盖 |
void | clear() | 从该集合中删除所有元素 |
boolean | contains(Object o) | 如果该集合包含指定的元素,则返回 true |
boolean | equals(Object o) | 将指定对象与此集合进行相等性比较,相等则返回true |
boolean | remove(Object o) | 如果指定的元素存在,则从该集合中移除该元素 |
int | size() | 返回此集合中的元素数(长度) |
boolean | isEmpty() | 如果此集合不包含任何元素,则返回 true |
Object[] | toArray() | 返回包含此set中所有元素的数组(即把集合转换为数组) |
(由于Set没有get方法,因此Set集合取出元素的方式可以采用:迭代器或forEach)
HashSet集合
- java.util.HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。
- HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能,底层数据结构是 HashMap 。
- HashSet 保证元素唯一性的方式依赖于:hashCode 与 equals 方法。
public class HashSetDemo { public static void main(String[] args) {
//创建 Set集合
HashSet<String> set = new HashSet<String>();
//添加元素
set.add(new String("123"));
set.add("123");
set.add("123");
set.add("321");
//遍历
for (String name : set) {
System.out.println(name);
}
}
打印结果为:
123
321
说明Set集合中不能存储重复元素,旧的元素会被覆盖。
HashSet集合存储数据的结构(哈希表)
TreeSet
- TreeSet是一个有序的集合,它的作用是提供有序的Set集合。
- TreeSet是基于TreeMap实现的,支持2种排序方式:自然排序或者根据提供的 Comparator 进行排序。
- TreeSet的迭代器是快速失败的。即当正在迭代的集合被修改时,运行出错。
- 当集合要存储自定义类时,自定义类需要实现 Comparable 接口,并重写 comparaTo() 方法。
//自然排序
public static void main(String[] args) {
TreeSet<String> treeset = new TreeSet<>();
treeset.add("B");
treeset.add("D");
treeset.add("C");
treeset.add("A");
for(String s:treeset) {
System.out.println(s);
}
}
//输出结果:A B C D