对比:
└——-Set 接口: 存储无序的,不可重复的数据
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树,元素排好序
1、无序性:根据数据的Hash值存储,
2、不可重复:先调用该对象的hashCode方法,计算hash值,存储在底层数组的指定位置
如果哈希值一样在调用equals()方法返回true,添加失败;否则添加成功(以链表方式存储)
HashSet
- 数组+链表——底层是hashMap
HashSet hashSet = new HashSet(75, (float) 0.70);
元素必须可以进行比较,自定义元素实现Comparable接口或构造集合时重写Comparator
实现了NavigatableSet接口:便于定位元素以及反向遍历的方法
E higher(E value);E lower(E vlaue)返回大于或小于value的最小或最大元素E ceiling(E value);E floorvalue)返回大于等于或小于等于value的最小或最大元素Iterator iterator = set.descendingIterator();递减遍历集合的迭代器
- 实现了SortedSet接口:
E first();/E last();
- 底层使用红黑树
