目录
- 一、HashSet
- 概述
- 底层数据结构
- 常用方法
- 二、TreeSet
- 概述
- 底层数据结构
- 常用方法
- 三、LinkedHashSet
- 概述
- 底层数据结构
- 常用方法
一、HashSet
概述
HashSet 是 Java 中的一个集合类,它实现了 Set 接口,用于存储不重复的元素。它基于 HashMap
实现(对HashMap的一个简单封装),底层数据结构是HashTable
,并继承了 HashMap 的一些方法。需要注意的是,HashSet 中的元素是无序的,并且不允许重复。
底层数据结构
/**
* The HashMap which backs this Set.
*/
private transient HashMap<T, String> map;
常用方法
HashSet 是 Java 中的一个集合类,它实现了 Set 接口,用于存储不重复的元素。它基于 HashMap 实现,并继承了 HashMap 的一些方法。
添加元素
add(E e)
: 将指定的元素添加到 HashSet 中,如果元素已经存在,则不添加并返回false
。addAll(Collection c)
: 将指定集合中的所有元素添加到 HashSet 中。
删除元素
remove(Object o)
: 从 HashSet 中删除指定的元素,如果元素存在则返回true
,否则返回false
。clear()
: 清空 HashSet 中的所有元素。
判断元素
contains(Object o)
: 判断 HashSet 中是否包含指定的元素,如果包含则返回true
,否则返回false
。isEmpty()
: 判断 HashSet 是否为空,如果为空则返回true
,否则返回false
。
获取信息
size()
: 返回 HashSet 中元素的数量。iterator()
: 返回一个迭代器,用于遍历 HashSet 中的元素。
其他方法
toArray()
: 将 HashSet 中的元素转换为数组。containsAll(Collection c)
: 判断 HashSet 是否包含指定集合中的所有元素。removeAll(Collection c)
: 从 HashSet 中删除包含在指定集合中的所有元素。retainAll(Collection c)
: 从 HashSet 中删除所有未包含在指定集合中的元素。
二、TreeSet
概述
TreeSet 也是 Java 中的一个集合类,它同样实现了 Set 接口,并继承了 SortedSet
接口。TreeSet 基于 TreeMap
实现,底层数据结构是红黑树,可以对元素进行排序。需要注意的是,TreeSet 中的元素是有序的,并且不允许重复。元素的排序方式取决于元素的自然顺序或指定的比较器。
底层数据结构
/**
* The NavigableMap which backs this Set.
*/
// Not final because of readObject. This will always be one of TreeMap or
// TreeMap.SubMap, which both extend AbstractMap.
private transient NavigableMap<T, String> map;
常用方法
添加元素
add(E e)
: 将指定的元素添加到 TreeSet 中,并根据元素的自然顺序或指定的比较器进行排序。addAll(Collection c)
: 将指定集合中的所有元素添加到 TreeSet 中。
删除元素
remove(Object o)
: 从 TreeSet 中删除指定的元素。clear()
: 清空 TreeSet 中的所有元素。
判断元素
contains(Object o)
: 判断 TreeSet 中是否包含指定的元素。isEmpty()
: 判断 TreeSet 是否为空。first()
: 返回 TreeSet 中的第一个元素。last()
: 返回 TreeSet 中的最后一个元素。
范围操作
headSet(E toElement)
: 返回小于指定元素的元素集合。tailSet(E fromElement)
: 返回大于等于指定元素的元素集合。subSet(E fromElement, E toElement)
: 返回大于等于 fromElement 且小于 toElement 的元素集合。
导航方法
lower(E e)
: 返回小于指定元素的最大的元素。higher(E e)
: 返回大于指定元素的最小元素。floor(E e)
: 返回小于等于指定元素的最大的元素。ceiling(E e)
: 返回大于等于指定元素的最小的元素。
其他方法
size()
: 返回 TreeSet 中元素的数量。iterator()
: 返回一个迭代器,用于遍历 TreeSet 中的元素。descendingIterator()
: 返回一个逆序迭代器,用于逆序遍历 TreeSet 中的元素。
三、LinkedHashSet
概述
LinkedHashSet 继承自 HashSet 并实现了 Set 接口。LinkedHashSet 的特点是维护元素的插入顺序,也就是说,遍历 LinkedHashSet 中的元素时,会按照元素添加的顺序访问它们。需要注意的是,LinkedHashSet 中的元素也是不允许重复的;LinkedHashSet 与 HashSet 的主要区别在于:LinkedHashSet 维护元素的插入顺序,而 HashSet 不维护。LinkedHashSet 的性能略低于 HashSet,因为需要维护插入顺序。
底层数据结构
LinkedHashSet的底层数据是哈希表+双向链表
常用方法
添加元素
add(E e)
: 将指定的元素添加到 LinkedHashSet 的末尾。addAll(Collection c)
: 将指定集合中的所有元素添加到 LinkedHashSet 的末尾。
删除元素
remove(Object o)
: 从 LinkedHashSet 中删除指定的元素。clear()
: 清空 LinkedHashSet 中的所有元素。
判断元素
contains(Object o)
: 判断 LinkedHashSet 中是否包含指定的元素。isEmpty()
: 判断 LinkedHashSet 是否为空。
获取信息
size()
: 返回 LinkedHashSet 中元素的数量。iterator()
: 返回一个迭代器,用于按照插入顺序遍历 LinkedHashSet 中的元素。
其他方法
toArray()
: 将 LinkedHashSet 中的元素转换为数组。containsAll(Collection c)
: 判断 LinkedHashSet 是否包含指定集合中的所有元素。removeAll(Collection c)
: 从 LinkedHashSet 中删除包含在指定集合中的所有元素。retainAll(Collection c)
: 从 LinkedHashSet 中删除所有未包含在指定集合中的元素。