Set
Set实现了Collection,所以他拥有Collection的全部方法
特点
- 不允许存储重复的元素
- 没有索引以及带索引的方法
- 不能使用 普通的for(fori循环)循环 遍历
- 内部进行排序,并不是按照添加顺序排序
- 可以有null,但是只能有一个
Set的实现类
Set 的实现类有 HashSet 和 TreeSet:
**HashSet:**内部是由哈希表(实际上是一个 HashMap 实例)支持的。集合元素可以是null,但只能放入一个null。无序的。
**TreeSet:**是二叉树实现的,有序的,或者根据创建 set 时提供的 Comparator 进行排序。
Set集合的使用
普通使用
//创建Set集合
Set<Integer> set = new HashSet<>();
//添加元素
set.add(1);
set.add(3);
set.add(5);
set.add(2);
set.add(3);//已经有了3这个元素了,再次添加无效
//循环遍历输出
for (Integer integer : set) {
System.out.println("integer = " + integer);
}
输出结果
这样可以看到,代码中添加了两个3 这里却只输出一个
integer = 1
integer = 2
integer = 3
integer = 5
对集合进行去除重复
//创建一个list集合
List<Integer> list = new LinkedList<>();
//添加元素
list.add(3);
list.add(2);
list.add(4);
list.add(3);//这里也有一个重复的3
//遍历输出list集合
for (Integer listNum : list) {
System.out.println("listNum = " + listNum);
}
//创建Set集合并且将list集合元素添加进去
Set<Integer> set = new HashSet<>(list);
//循环遍历输出
for (Integer setNum : set) {
System.out.println("setNum = " + setNum);
}
输出结果
可以看到 setNum 里面只有一个3
listNum = 3
listNum = 2
listNum = 4
listNum = 3
setNum = 2
setNum = 3
setNum = 4
同样,这里使用其他的Object对象都可以做到去除重复项
具体去除重复的过程详细过程是Object对象的hashCode相同的添加失败