Java集合简介之List接口
前边介绍过List接口,下边我们介绍一下Set相关接口
Set:一个不包含重复元素的 collection。无序且唯一。
HashSet
实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
注意:它不是同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。
LinkedHashSet
介于HashSet和TreeSet之间。它基于一个由链表实现的哈希表,保留了元素插入顺序。
与 HashSet 的不同之外在于,LinkedHashSet维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。注意,插入顺序不 受在 set 中重新插入的 元素的影响。
哈希表保证元素的唯一性,链表保证元素有序,也就是存入顺序和取出顺序相同。
TreeSet
使用树形结构(红黑树red-black tree)实现的。
TreeSet中的元素是可排序的TreeSet提供了add()、remove()、contains()、first()、last()、headSet()、tailSet()等方法来操作排序后的集合。
TreeSet基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
注意:此实现不是同步的。如果多个线程同时访问一个 TreeSet,而其中至少一个线程修改了该 set,那么它必须 外部同步。这一点与HashSet相似。
两种排序方式:
A-自然排序,也是默认排序(实现Comparable)
B-比较器排序。取决于构造方法。