Java面试八股之List、Set、Map和Queue之间的区别

  1. Java中List、Set、Map和Queue之间的区别

List

List 是一个有序且允许重复元素的集合。它提供了按索引访问元素的能力,也就是说,你可以通过元素的插入位置或指定的索引来精确地访问、添加或删除元素。List 的典型实现包括 ArrayList 和 LinkedList。

特点:

有序:元素的顺序是固定的,可以通过索引(整数)访问任何位置的元素。

重复:允许存储重复的元素。

常见操作:

按索引访问、插入、删除元素:E get(int index), void add(int index, E element), E remove(int index)

添加、删除元素:boolean add(E e), boolean remove(Object o)

查询包含性:boolean contains(Object o)

遍历:通过 Iterator 或 ListIterator 进行正向、反向遍历,后者还支持双向移动和在迭代过程中修改列表。

Set:

Set 是一个不允许重复元素的集合,其内部通常不保证元素的顺序。Set 的主要作用在于去重和唯一性检查。常见的 Set 实现有 HashSet、LinkedHashSet 和 TreeSet。

特点:

无序(不保证顺序):元素的添加和遍历顺序可能与插入顺序不一致,除非使用如 LinkedHashSet 或 TreeSet 这样的有序 Set 实现。

无重复:不允许存储重复元素,根据元素的 equals() 和 hashCode() 方法判断是否重复。

常见操作:

添加、删除元素:boolean add(E e), boolean remove(Object o)

查询包含性:boolean contains(Object o)

遍历:通过 Iterator 进行遍历。

Map:

Map 是一种键值对(key-value pair)的数据结构,它将键与值关联起来,每个键都是唯一的。Map 通过键来检索对应的值,不允许键重复,但允许值重复。常见的 Map 实现有 HashMap、LinkedHashMap、TreeMap 和 ConcurrentHashMap。

特点:

键值对:存储数据的形式为 (key, value),键唯一,值可以重复。

键无重复:不允许有相同的键,根据键的 equals() 和 hashCode() 方法判断键的唯一性。

无序/有序:取决于具体的实现,如 HashMap 无序,TreeMap 有序(键自然排序或自定义排序)。

常见操作:

插入、删除键值对:V put(K key, V value), V remove(Object key)

通过键查询值:V get(Object key)

查询键值对的存在性:boolean containsKey(Object key), boolean containsValue(Object value)

遍历:通过 Iterator 或 EntrySet 进行遍历,可以获取键值对。

Queue

Queue 是一种遵循先进先出(FIFO,First-In-First-Out)原则的线性数据结构。它主要用于排队或缓冲数据,常用于实现生产者-消费者模型或任务调度。常见的 Queue 实现包括 ArrayDeque、LinkedList(作为 Deque 使用)和 PriorityQueue。

特点:

FIFO:元素的添加和移除遵循先进先出原则。

特殊操作:提供 offer()(添加元素)、poll()(移除并返回头元素)、peek()(查看但不移除头元素)等队列特有操作。

常见操作:

添加元素:boolean offer(E e)

移除元素:E poll()

查看头元素:E peek()

查询队列状态:boolean isEmpty(), int size()

总结:

List 用于有序、可重复元素的存储和访问,支持索引操作。

Set 用于无序、不可重复元素的存储,强调唯一性。

Map 存储键值对,通过键访问关联的值,键唯一,值可重复。

Queue 实现先进先出的队列操作,适用于排队、缓冲等场景。

选择使用哪种集合类型取决于应用程序对数据存储、访问、排序、唯一性等特性的具体需求。

 如果大家需要视频版本的讲解,欢迎关注我的B站:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

喜茶·茶坊黑金首店入驻北京三里屯,率先引入珍稀娟姗奶制茶

发布 | 大力财经 近日,喜茶茶坊 BLACK 在北京三里屯开业,这是喜茶新业态的首家黑金店型。该店在延续喜茶茶坊“鲜、茶、纯”的精品茗茶特色和宋代茶文化审美意趣的基础上,首次升级呈现了铜锅手煮烹茶工艺、娟姗牛乳制茶等创新尝试&#xff0…

【C++ 高阶数据结构 Test】AVL ~ 二叉搜索树

文章目录 1. AVL 树概念2. AVL 树节点的定义3. AVL树的插入4. AVL树的旋转4.1 新节点插入较高左子树的左侧---左左:右单旋4.2 新节点插入较高右子树的右侧---右右:左单旋4.3 新节点插入较高左子树的右侧---左右:先左单旋再右单旋4.4 新节点插…

电工能混到这份上

最近看到某电工师傅发了一篇帖子,大致内容是他在处理一个简单故障的时候居然花了很长的时间。我们一起来看看他遇到的是什么故障吧! plc 控制的一台设备,行走部分靠 2 个脚踏开关控制(内部开关量控制方向,电位器控制速度&#xff…

微信小程序快速开发-基础内容(内容真的又多又干货)

目录 实现横向布局效果 实现滚动效果 实现轮播图效果 实现文本长按选中复制效果 渲染 HTML 标签 按钮组件的使用效果 图片组件的使用效果 Mustache 语法 动态绑定内容(定义变量,渲染变量) 动态绑定属性(将属性定义为变量…

用SwitchHosts模拟本地域名解析访问

一.用SwitchHosts模拟本地域名解析访问 1.下载地址 https://download.csdn.net/download/jinhuding/89313168 2.使用截图

软考-软件工程

软件工程概述 软件工程指的是应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件 问题的工程,目的是提高软件生产率、提高软件质量、降低软件成本。 概述: 软件开发模型:指导软件开发的体系 需求分析确定软件…

谷歌外贸seo优化怎么做?

一般有两种选择,在大型电商平台开展业务,如亚马逊,阿里巴巴等平台,也可以选择搭建自己的独立站 选择在大型电商平台可以方便迅速建立起自己的商铺,不需要考虑太多交易,支付,物流等方面的问题&am…

ADS Momentum 仿真设置

1、选择Momenttum Microwave。 2、Layout不需要操作。 3、Partitioning 不需要操作。 4、没有叠层的话需要新建叠层,过孔可以在叠层中右键添加。 5、注意确认端口的Gnd Layer。 6、设置仿真频率。 7、Output Plan。 8、Option。 最后运行仿真,等待结果即…

【Python报错】Python安装模块时报错Fatal error in launcher

【Python报错】Python安装模块时报错Fatal error in launcher 最近需要用到python下载一个小工具,自信敲下回车键本想看到黑乎乎的终端上会出现快速跳跃的命令代码,没想到,报错了...... Fatal error in launcher: Unable to create process …

2024 年 6 月 银行从业资格考试(银从)如何备考?

文章目录 一、考试介绍(已了解的自行跳过此步骤)(一)含金量(二)就业方向(三)适合人群(四)报考条件(五)题型分值(六&#x…

【Unity之FairyGUI】你了解FGUI吗,跨平台多功能高效UI插件

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:就业…

鸿蒙应用布局ArkUI:【其他常用布局容器和组件】介绍

其他常用布局容器和组件 创建轮播(Swiper)实现轮播图功能 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 栅格布局(GridRow/GridCol)和Grid布局类似…