Collection接口详细介绍(下)

news2024/9/22 13:30:32

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

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

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

在这里插入图片描述

以下正文开始

文章目录

  • Collection接口介绍
  • Set接口介绍
  • HashSet实现类
  • TreeSet实现类

在这里插入图片描述

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是非线程安全的,在多线程环境下需要进行同步操作。

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/673633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSDN 周赛 59 期

CSDN 周赛 59 期 前言判断题单选题题目1题目2填空题编程题1、题目名称:坏掉的打字机2、题目名称:布尔零点计数小结前言 由于最近,csdn 每日一练新增了两个题目,按照惯例,那么新增的题目,会就近出现在最近的 CSDN 周赛中,嗯,经常参加周赛,并关注每日一练社区的小伙伴应…

51单片机一个TIMER输出6个PWM

51单片机的timer很少&#xff0c;往往16bit的timer只有一个&#xff0c;可以硬件输出的channel也不多。如我手上这就是这个情况&#xff0c;timer1, 16bit, 只有三个通道。我想输出6个pwm&#xff0c;这个就无法硬件的方式了。只能使用软件模拟了。pwm是1-20ms一个周期&#xf…

Thinking in Java第四版2.8注释和嵌入式文档

文章目录 前言一、注释风格1.单行注释2.多行注释 二、语法三、标签总结 前言 Java8官方在线文档 文档描述对每个系统来说都是必备且重要的&#xff0c;这里将介绍一些javadoc标签&#xff0c;以便加深对文档的理解和编写等。 一、注释风格 1.单行注释 单行注释以一个//起头&a…

JavaWeb之tomcarHTTP

1 DOM4j Xml解析 1.1 JAXP  JDK内置&#xff0c;不需要导入第三方jar包&#xff0c;简单工具优先选择。  支持两种解析方式&#xff1a;DOM、SAX 1.1.1 JAXP—DOM 加载xml 生成一个DOM树。获得整个文档的描述对象Document 解析 api 获得工厂 DocumentBuilderFactory –》 …

【MySql】MySql的事务基础篇

文章目录 CURD加控制什么是事物为什么会出现事务事务的版本支持事务的提交方式 CURD加控制 模拟一个买票系统的场景如下所示&#xff1a; MySQL注定会被多个客户端进行访问的&#xff0c;这个是肯定的&#xff0c;存储的都是数据&#xff0c;数据在上层可能有一个线程在用&…

C++17

目录 基本语言特性结构化绑定if和switch初始化器 std::string_view属性[[nodiscard]][[maybe_unused]][[fallthrough]] 模板特性新的标准库组件std::optional<>std::variant<>std::anystd::bytestd::as_const 文件系统库零星新特性 基本语言特性 结构化绑定 概念…

ubuntu安装WPS2019以及解决缺少字体问题

环境&#xff1a;ubuntu22.04.2 LTS 步骤&#xff1a; 1.去官网下载最新的WPS&#xff0c;官网地址如下&#xff1a;WPS Office 2019 for Linux-支持多版本下载_WPS官方网站 2.sudo dpkg -i 安装包.deb 3.安装完成&#xff0c;首次用WPS打开某个文档&#xff0c;会出现如下报…

硬件入门之什么是三极管

硬件入门之什么是三极管 文章目录 硬件入门之什么是三极管一、三极管是什么&#xff1f;&#xff08;百度百科&#xff09;三极管的3种工作状态分别是截止状态、放大状态、饱和状态 二、实际应用场景1.放大电路 &#xff08;放大状态&#xff09;2、开关电路&#xff08;截至状…

【聚类算法】谱聚类spectral clustering

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 说明&#xff1a; 后续增补 1. 正文 1.1 整体理解 谱聚类&#xff08;Spectral Clustering&#xff09;是一种基于图论的聚类方法&#xff0c;将带权无…

基于java,springboot的校园闲置物品租售系统设计与实现

背景 校园闲置物品租售系统应有的主要功能模块&#xff0c;本系统有管理员、卖家和用户&#xff0c;管理员&#xff1b;首页、个人中心、用户管理、卖家管理、商品种类管理、商品信息管理、商品租借管理、商品购买管理、闲置鱼塘、系统管理&#xff0c;用户&#xff1b;首页、…

Java并发中的原子性、可见性和有序性

基于JMM的内存模型&#xff0c;Java并发编程的核心问题&#xff1a;原子性、可见性、有序性 那么在此之前&#xff0c;我们有必要先说一下Java的JMM内存模型&#xff1a;java内存模型&#xff0c;是java虚拟机规范的一种工作模式&#xff0c;它将内存分为主内存和工作内存。线…

【机器学习】十大算法之一 “PCA”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

高性能计算的意义是什么

高性能计算&#xff08;High-Performance Computing&#xff0c;HPC&#xff09;在现代科学、工程和商业领域中具有重要意义。以下是一些高性能计算的重要意义&#xff1a; 加速科学研究和创新&#xff1a;高性能计算可以提供大规模的计算能力和存储资源&#xff0c;使得科学家…

stm32数据对齐、PRESERVE8、freertos堆栈

为什么需要数据对齐&#xff1f; 避免数据在内存中跨边界存储&#xff0c;减少读取数据次数&#xff0c;提高效率&#xff0c;本质上是以空间换时间的做法 下图中属于同一水平位置的为同一边界 变量在同一边界里的一次存储周期就可以读取 一旦跨了上下两个边界来存储就需要至少…

干爆源码系列之Step by step lldb/gdb调试多线程

Step by step lldb/gdb调试多线程 0.叙谈1.断点分析2.多线程切换 2.1 并发队列 2.1.1 两次入队 2.2 线程调度 2.2.1 执行build端子MetaPipeline 2.2.1.1 Thread6调度第一个PipelineInitializeTask 2.2.1.2 Thread7调度第二个Pipelin…

TypeScript 数据联合类型的解读

概念&#xff1a; 联合类型&#xff08;Union Types&#xff09;表示取值可以为多种类型中的一种&#xff0c;或者也可以理解将多个类型合并为一个类型对变量进行注解。 语法结构&#xff1a; 联合类型使用 | 分隔每个类型。 let 变量&#xff1a;类型1 | 类型2 | 类型3… 案列…

基于Java校园代购服务订单系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

你的前端技术是否能通过这些高频面试题?

文章目录 1.储存了某个数据到 localStorage&#xff0c;立即进行 localStorage.getItem&#xff0c;能否取到值&#xff1f;2.实现异步的方式有几种3.异步不阻塞4.选择 div 的第二个子元素5.display: none 和 visibility: hidden 的区别6.如果想要让一个元素的宽高包含元素的 b…

【初识C语言】选择语句+循环语句+函数+数组

文章目录 前言1. 选择语句2. 循环语句3. 函数4. 数组 前言 C语言是一门结构化的程序设计语言 顺序结构&#xff1b; 选择结构&#xff1b; 循环结构。 1. 选择语句 生活中处处面临着选择&#xff0c;如果你好好学习&#xff0c;校招时拿一个好offer&#xff0c;走上人生巅峰。…

关于程序员的工作总结

程序员工作总结篇1 从我x月x日进入公司到现在已经过去一年了&#xff0c;从一名刚刚结束实习的学生到一名独立的开发人员&#xff0c;角色改变了&#xff0c;职责也改变了。虽然已经预计了工作之中会有很多困难&#xff0c;可是在实际的项目开发中&#xff0c;自己所遇到远远不…