对比:

└——-Set 接口: 存储无序的,不可重复的数据
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树,元素排好序
1、无序性:根据数据的Hash值存储,
2、不可重复:先调用该对象的hashCode方法,计算hash值,存储在底层数组的指定位置
如果哈希值一样在调用equals()方法返回true,添加失败;否则添加成功(以链表方式存储)

3、Set没有额外的方法,用Collection声明的方法

HashSet

  1. 数组+链表——底层是hashMap
  2. HashSet hashSet = new HashSet(75, (float) 0.70);
  • 设置桶数和散列因子

    LinkedHashSet

    1、HashSet的子类
    #2、无序的
    #3、先进先出

    TreeSet

  1. 元素必须可以进行比较,自定义元素实现Comparable接口或构造集合时重写Comparator

  2. 实现了NavigatableSet接口:便于定位元素以及反向遍历的方法

  • E higher(E value);E lower(E vlaue) 返回大于或小于value的最小或最大元素
  • E ceiling(E value);E floorvalue) 返回大于等于或小于等于value的最小或最大元素
  • Iterator iterator = set.descendingIterator(); 递减遍历集合的迭代器
  1. 实现了SortedSet接口:
  • E first(); /E last();
  1. 底层使用红黑树