Set
接口:Collection、Set
1、继承结构
(1)Javadoc文档【tree】:
(2)类图:
2、方法
(1)Collection接口
- Object:equals、hashCode;
- 判断:contains、isEmpty、size
- 遍历:iterator
- add、remove、clear
(2)Set接口
- add、remove、clear
- contains、isEmpty、size
- iterator
- of:不可修改Set
实现类:HashSet、TreeSet
1、继承结构
类图:
2、相关实现类
抽象类
(1)AbstractCollection
Collection接口的骨架式实现类,最小化实现Collection接口的代价。
(2)AbstractSet
只实现了equals、hashCode
接口
SortedSet
对元素提供排序的Set。【自然顺序排序 / Comparator
排序】。
元素必须实现Comparable接口(或使用比较器)。
所有元素必须是相互可比较的:e1. compareto (e2)
(或comparator.compare(e1, e2)
)不能对元素e1和e2抛出ClassCastException
异常。
迭代器:按元素升序遍历set。
- Comparator<? super E> comparator()
- E first()、E last()
- SortedSet<E> headSet(E toElement)、SortedSet<E> subSet(E fromElement, E toElement)
- SortedSet<E> subSet(E fromElement, E toElement)
NavigableSet(子接口)
定位搜索目标的最接近匹配。方法lower(E)、floor(E)、ceiling(E)和higher(E)分别返回小于、小于或等于、大于或等于和大于给定元素的元素,如果不存在这样的元素则返回null。
可按升序或降序访问和遍历NavigableSet。
descendingSet()方法返回集合的视图,其中所有关系方法和方向方法的意义颠倒了。【升序操作和视图的性能可能比降序操作和视图的性能快。】
pollFirst()和pollLast(),它们返回和删除最低和最高元素(如果存在),否则返回null。
subSet(E, boolean, E, boolean)、headSet(E, boolean)和tailSet(E, boolean)与同名的SortedSet。不同之处在于,它们接受描述下界和上界是包含还是排斥的附加参数。
在允许null元素的实现中,导航方法的返回值可能是不明确的。但是,即使在这种情况下,也可以通过检查contains(null)来消除结果的歧义。为了避免这类问题,建议这个接口的实现不允许插入null元素。(注意,可比较元素的排序集本身不允许为空。)
具体实现类
1、HashSet
非同步。转换同步:Collections.synchronizedSet(new HashSet(…))
LinkedHashSet(子类)
使用Hash表、双向链表维护 =>可以定义维护遍历顺序(元素插入顺序)。
非同步。转换同步:Collections.synchronizedSet(new HashSet(…))
只重写了Iterable接口中的spliterator()方法。
2、TreeSet
自然顺序(元素)/ Comparator提供的排序
非同步。Collections.synchronizedSortedSet(new TreeSet(...));
降序: