Set实际上相当于只存储key、不存储value的Map。我们经常用Set用于去除重复元素。
因为放入Set的元素和Map的key类似,都要正确实现equals()和hashCode()方法,否则该元素无法正确地放入Set。
Set用于存储不重复的元素集合,它主要提供以下几个方法:
- 将元素添加进Set
:boolean add(E e) - 将元素从Set
删除:boolean remove(Object e) - 判断是否包含元素:boolean contains(Object e)
Set接口并不保证有序,而SortedSet接口则保证元素是有序的:
- HashSet是无序的,因为它实现了Set接口,并没有实现SortedSet接口;(不同jdk版本可能显示效果不一致)
- TreeSet是有序的,因为它实现了SortedSet接口。(和Treemap一样不复写hashCode()方法,所以有序)
这里的无序和有序指的是 :元素的排序顺序,如下面代码所示
public class Main {
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("apple");
set.add("banana");
set.add("pear");
set.add("orange");
for (String s : set) {
System.out.println(s);
}
}
}
输出:
apple
banana
orange
pear