Set
# 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
对象。
上次更新: 2024/10/1 18:45:09