Collection接口详细介绍(下)

本文介绍了Java中的Collection接口及其子接口List、Set和Queue,重点讲解了Set接口和两个主要实现类HashSet与TreeSet的特点和操作,包括元素唯一性、存储结构和操作性能等方面。
摘要由CSDN通过智能技术生成

前言:
本篇文章主要讲解Java中的Collection接口以及相关实现类的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。

如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~

小威在此先感谢各位小伙伴儿了😁

在这里插入图片描述

以下正文开始


在这里插入图片描述

Collection接口介绍

Java中的集合按照存储结构可以分为两大类,单列集合Collection和双列集合Map,本文将先讲解单列集合Collection的相关知识点。

Java中的Collection集合接口是一个用于存储、处理和操作对象的容器,,它有三个主要的子接口,分别是List、Set和Queue

  1. List:List接口是一个有序集合,允许重复元素。它继承了Collection接口并添加了一些额外的方法,如get(int index)、set(int index, E element)等。常见实现类包括ArrayList和LinkedList。

  2. Set:Set接口是一个不允许重复元素的集合,保证其内部元素唯一性。它也继承自Collection接口,并且添加了一些特殊的限制条件来保证元素的唯一性。常见实现类包括HashSet和TreeSet。

  3. 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有以下几个特点:

  1. 元素不允许重复:当向HashSet添加已经存在的元素时,会返回false,并且该元素不会被添加到集合中。

  2. 无序性:HashSet没有固定顺序,每次遍历出来的结果都可能不同。

  3. 允许null值:可以添加一个null值作为元素。

  4. 线程不安全:HashSet是非线程安全的,在多线程环境下需要进行同步操作。

  5. 高效性能:由于采用哈希表实现,查找、插入、删除操作都具有很好的性能。

TreeSet实现类

Java中的TreeSet是一种基于红黑树实现的有序集合,它可以存储不重复的元素,并且会按照元素的大小进行排序。

TreeSet继承了AbstractSet类。在内部实现上,TreeSet使用红黑树来存储元素,其中每个节点都是一个Entry对象。

在这里插入图片描述
TreeSet有以下几个特点:

  • 元素不允许重复:当向TreeSet添加已经存在的元素时,新元素不会被添加到集合中。

  • 有序性:TreeSet中的元素会按照自然顺序或者指定比较器的顺序进行排序。

  • 不允许null值:由于需要进行比较和排序操作,所以不能添加null值作为元素。

  • 线程不安全:TreeSet是非线程安全的,在多线程环境下需要进行同步操作。

  • 高效性能:由于采用红黑树实现,查找、插入、删除操作都具有很好的性能。

文章到这里就先结束了,感兴趣的可以订阅专栏哈,后续会继续分享相关的知识点。

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小威要向诸佬学习呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值