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()方法,所以有序)

    这里的无序和有序指的是 :元素的排序顺序,如下面代码所示

    1. public class Main {
    2. public static void main(String[] args) {
    3. Set<String> set = new TreeSet<>();
    4. set.add("apple");
    5. set.add("banana");
    6. set.add("pear");
    7. set.add("orange");
    8. for (String s : set) {
    9. System.out.println(s);
    10. }
    11. }
    12. }
    13. 输出:
    14. apple
    15. banana
    16. orange
    17. pear