Set
# 03.Set
如果我们只需要存储不重复的key,并不需要存储映射的value,那么就可以使用Set
。
# 常用方法
Set
用于存储不重复的元素集合,它主要提供以下几个方法:
- 将元素添加进
Set<E>
:boolean add(E e)
- 将元素从
Set<E>
删除:boolean remove(Object e)
- 判断是否包含元素:
boolean contains(Object e)
- 清空所有元素:
void clear()
Set
也是一个接口,常用的实现类有HashSet
演示下:
Set<String> set = new HashSet<>();
System.out.println(set.add("艾米莉雅")); //true
System.out.println(set.add("雷姆")); //true
System.out.println(set.add("拉姆")); //true
System.out.println(set.add("姬丝秀忒")); //true
System.out.println(set.add("姬丝秀忒")); //false
System.out.println();
System.out.println(set.contains("姬丝秀忒")); //true
System.out.println(set.remove("姬丝秀忒")); //true
System.out.println(set.remove("姬丝秀忒")); //false,元素已经不存在
System.out.println(set.size()); //3
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
注意点:
- 放入
Set
的元素和Map
的key类似,都要正确实现equals()
和hashCode()
方法,否则该元素无法正确地放入 -
HashSet
类似一个只存储key、不存储value的Map
,其内部实现就是对HashMap
的一个简单封装 -
Set
接口并不保证有序
# TreeSet
和TreeMap类似,Set也有一个TreeSet类,实现了SortedSet
接口,是有序的。
┌───┐
│Set│
└───┘
▲
┌────┴─────┐
│ │
┌───────┐ ┌─────────┐
│HashSet│ │SortedSet│
└───────┘ └─────────┘
▲
│
┌─────────┐
│ TreeSet │
└─────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
在遍历TreeSet
时,输出就是有序的:
Set<String> set = new TreeSet<>();
set.add("orange");
set.add("apple");
set.add("banana");
for (String s : set) {
System.out.println(s);
}
1
2
3
4
5
6
7
2
3
4
5
6
7
同TreeMap
一样,添加的元素必须正确实现Comparable
接口,如果没有实现Comparable
接口,那么创建TreeSet
时必须传入一个Comparator
对象。
在GitHub上编辑此页 (opens new window)
上次更新: 2022/12/31 22:07:34