前言:
本篇文章主要讲解Java中的Collection接口以及相关实现类的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。
如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~
小威在此先感谢各位小伙伴儿了😁
以下正文开始
文章目录
- Collection接口介绍
- Set接口介绍
- HashSet实现类
- TreeSet实现类
Collection接口介绍
Java中的集合按照存储结构可以分为两大类,单列集合Collection和双列集合Map,本文将先讲解单列集合Collection的相关知识点。
Java中的Collection集合接口是一个用于存储、处理和操作对象的容器,,它有三个主要的子接口,分别是List、Set和Queue。
-
List:List接口是一个有序集合,允许重复元素。它继承了Collection接口并添加了一些额外的方法,如get(int index)、set(int index, E element)等。常见实现类包括ArrayList和LinkedList。
-
Set:Set接口是一个不允许重复元素的集合,保证其内部元素唯一性。它也继承自Collection接口,并且添加了一些特殊的限制条件来保证元素的唯一性。常见实现类包括HashSet和TreeSet。
-
Queue:Queue接口是一个队列集合,通常按照先进先出(FIFO)原则进行操作。它继承自Collection接口并添加了一些额外的方法,如offer(E e)、poll()等。 常见实现类包括ArrayDeque和PriorityQueue。
接着先列举下Collection接口中的常用方法:
add(E e):向集合中添加一个元素。
addAll(Collection<? extends E> c):向集合中添加一个集合中的所有元素。 clear():清空集合中的所有元素。 contains(Object o):判断集合中是否包含指定元素。 containsAll(Collection<?> c):判断集合中是否包含指定集合中的所有元素。
equals(Object o):比较两个集合是否相等。
hashCode():返回集合的哈希值。
isEmpty():判断集合是否为空。
iterator():返回一个迭代器,用于遍历集合中的元素。
remove(Object o):从集合中移除指定元素。
removeAll(Collection<?> c):从集合中移除指定集合中的所有元素。 retainAll(Collection<?> c):保留集合中指定集合中的所有元素。
size():返回集合中元素的数量。
toArray():将集合转换为数组。
toArray(T[] a):将集合转换为指定类型的数组。
以上是Collection接口中的常用方法,我们开发者会用即可。
Set接口介绍
Java中的Set接口代表了一组不包含重复元素的集合。Set接口继承了Collection接口,但是并未增加任何新的方法。Set接口的实现类主要有以下几个:
- HashSet:使用哈希表作为数据结构实现的Set,它没有保证元素的顺序,但是它实现了常数时间复杂度的添加、删除、查找操作。
- TreeSet:使用红黑树作为数据结构实现的Set,它按照元素的自然排序进行排序(或者根据提供的比较器进行排序),因此它的元素具有顺序性。
- LinkedHashSet:使用哈希表和链表实现的Set,它按照元素插入的顺序进行排序,因此它既有哈希表查找快的优势,又保留了元素顺序。
Set接口提供了如下常用方法:
add(E e):添加一个元素到Set中。
remove(Object o):从Set中移除指定的元素。
clear():移除Set中的所有元素。
contains(Object o):判断Set是否包含指定的元素。
isEmpty():判断Set是否为空。
size():获取Set中元素的数量。
我们需要注意的是,Set接口中的元素必须满足一定的条件才能放入其中。具体来说,元素必须实现hashCode方法和equals方法,以便Set可以正确地判断重复元素。因此在使用Set时,我们要确保添加的元素具有正确的hashCode和equals方法实现,否则可能会造成Set无法正常工作的问题。
HashSet实现类
Java中的HashSet是一种基于哈希表实现的集合,它允许存储唯一的元素,不允许重复。
HashSet继承了AbstractSet类,并且实现了Set接口。在内部实现上,HashSet使用HashMap来存储元素,其中HashMap中的key就是HashSet中的元素,而value则是一个占位符对象PRESENT。
HashSet有以下几个特点:
-
元素不允许重复:当向HashSet添加已经存在的元素时,会返回false,并且该元素不会被添加到集合中。
-
无序性:HashSet没有固定顺序,每次遍历出来的结果都可能不同。
-
允许null值:可以添加一个null值作为元素。
-
线程不安全:HashSet是非线程安全的,在多线程环境下需要进行同步操作。
-
高效性能:由于采用哈希表实现,查找、插入、删除操作都具有很好的性能。
TreeSet实现类
Java中的TreeSet是一种基于红黑树实现的有序集合,它可以存储不重复的元素,并且会按照元素的大小进行排序。
TreeSet继承了AbstractSet类。在内部实现上,TreeSet使用红黑树来存储元素,其中每个节点都是一个Entry对象。
TreeSet有以下几个特点:
-
元素不允许重复:当向TreeSet添加已经存在的元素时,新元素不会被添加到集合中。
-
有序性:TreeSet中的元素会按照自然顺序或者指定比较器的顺序进行排序。
-
不允许null值:由于需要进行比较和排序操作,所以不能添加null值作为元素。
-
线程不安全:TreeSet是非线程安全的,在多线程环境下需要进行同步操作。
-
高效性能:由于采用红黑树实现,查找、插入、删除操作都具有很好的性能。
文章到这里就先结束了,感兴趣的可以订阅专栏哈,后续会继续分享相关的知识点。