Java面试篇基础部分-Java中的集合类

news2024/11/13 0:21:23

  Java集合是面试中经常被问到的一块内容,很多人在这个地方被面试官吊打。Java集合类被定义在java.util包中,主要有四种集合,分别是List、Queue、Set和Map,每种集合分类如下图所示
在这里插入图片描述

List集合

  List是一种在开发中比较常用的集合类,作为有序的Collection的典范,分别有如下的三个实现类

  • ArrayList
  • Vector
  • LinkedList

从名字可以看出三个实现类分别都代表什么。

  ArrayList

  ArrayList底层是通过数组实现的,既然是数组那么它就有数组带给它的属性,增加和删除速度慢,但是查询速度快,是线程不安全的。

  ArrayList的缺点是元素必须是连续的存储,当需要在ArrayList中间插入一个或者删除一个元素的时候,需要将待插入或者删除节点之后的所有的元素进行移动。所以ArrayList不适合随机插入和删除操作。适合的操作是遍历和随机查找。可以通过下标直接找到对应的元素。

  ArrayList 不需要在定义的时候指定数组的长度,而是在数据存储长度不足的时候,ArrayList会创建一个新的更大的数组并且将数组中已经有的数据复制到新的数组中。

  Vector

  Vector基于数组实现,增加和删除速度慢,查询速度快,是线程安全的。

  Vector的数据结构与ArrayList的结构是一样的,都是基于数组的方式进行实现的。与ArrayList不同的是Vector支持线程同步操作,也就是说同一时刻只允许一个线程对Vector进行写操作,这样保证了在多线程的环境下的数据一致性问题,但是需要对Vector进行反复的加锁释放锁的操作,所以Vector在读写操作上的速度的要比ArrayList低。

  LinkedList

  LinkedList是基于双向链表,增加和删除的速度快,查询的速度慢,是线程不安全的。

  LinkedList采用的双向链表的数据结构进行存储元素,在对LinkedList进行插入和删除操作的时候,只需要在对应的节点上插入或者删除对应的元素即可,并且将节点的指针进行修改就可以了,数据变动是最小的,这样做的话插入和删除的效率很高。由于是链表数据结构,在随机访问的时候,需要从链表的头部一直遍历到对应的节点才能找到对应的元素,所以随机访问的速度较慢。除此之外,LinkedList 还提供了在List接口中未定义的方法,用来操作链表头部和尾部的元素,所以有的时候也可以当做堆栈、队列或者双向队列来使用。

Queue

  队列也是一种特殊的线性表,它只允许在两端进行操作,插入或者取出,不允许操作中间的数据。比如只允许在对头出队,队尾入队。这样就具有先进先出的特性(first in first out-FIFO)。就像排队买东西一样,不允许插队,先排先买。

  队列分为单向队列(有序队列),就是上面所说的排队模型,先进先出的操作,只允许一边进,另一边出,比如Java中的Queue。另外一种就是双端队列,两端都可以进行进出操作。比如java中的Deque。

  Queue是队列结构,在Java中常见的几种队列结构如下

  • ArrayBlockingQueue:基于数组数据结构实现的有界阻塞队列形式
  • LinkedBlockingQueue:基于链表数据结构实现的有界阻塞队列
  • PriorityBlockingQueue:支持优先级排序的无界阻塞式队列形式
  • DelayQueue:支持延迟操作的无界阻塞队列
  • SynchronousQueue:用于线程同步的阻塞队列
  • LinkedTransferQueue:基于链表实现的无界阻塞队列
  • LinkedBlockingDeque:基于链表实现的双向阻塞队列

  代码如下所示

import java.util.LinkedList;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 有界队列的基本实现
 */
public class MyQueue {
   

    private LinkedList<Object> list = new LinkedList<>();

    private AtomicInteger count = new AtomicInteger(0);

    private final int minSize = 0;

    private int maxSize;

    private final Objec

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

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

相关文章

股指期货的指数一直贴水是什么意思?

在投资的世界里&#xff0c;股指期货是一个既复杂又充满机会的领域。而“股指期货贴水”这一现象&#xff0c;更是让不少投资者感到困惑。今天&#xff0c;我们就用大白话&#xff0c;来详细解释一下股指期货贴水到底是什么意思。 一、什么是股指期货&#xff1f; 首先&#…

ppt一键生成软件免费版有哪些?职场小白看这里

俗话说得好&#xff1a;时间就是金钱&#xff0c;一款好用且高效的工具无疑能让我们的工作事半功倍。 特别是经常需要制作ppt的朋友&#xff0c;拥有ppt一键生成软件免费工具可以帮你们更高效的完成工作&#xff0c;将精力投入到其他事项去。 因此&#xff0c;今天这篇文章找…

虚拟电厂高质量发展,大众氢能港引领能源管理新变革

在2024年这个充满希望的夏日&#xff0c;上海市政府正式印发了《上海市虚拟电厂高质量发展工作方案》&#xff0c;标志着上海在探索能源结构优化、促进绿色低碳发展的道路上迈出了坚实的一步。该方案不仅为虚拟电厂的未来发展绘制了清晰的蓝图&#xff0c;更通过一系列创新举措…

Github 2024-09-09 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-09-09统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6TypeScript项目4Jupyter Notebook项目2C++项目2JavaScript项目2Shell项目1Dockerfile项目1C#项目1Dart项目1Rust项目1Microsoft Pow…

大健康企业如何通过私域流量与积分增值模式实现业绩飞跃

在探讨大健康领域的一家创新企业时&#xff0c;我们发现其成功之路并非仅仅依赖传统电商的广撒网策略&#xff0c;如大规模广告投放和促销优惠&#xff0c;而是巧妙转型&#xff0c;深耕私域流量的构建与独特商业模式的应用。 这一转变不仅显著提升了月度销售业绩&#xff0c;更…

不小心把电脑格式化了怎么恢复?这些步骤帮你找回数据

在日常使用电脑的过程中&#xff0c;我们有时会因为各种原因不小心对电脑进行了格式化操作。一旦电脑被格式化&#xff0c;所有的数据都将被清除&#xff0c;这给用户带来了巨大的困扰和损失。 然而&#xff0c;不必过于绝望&#xff0c;因为有些方法可以帮助我们恢复被格式化…

作为负责招聘的HR,如何解决职位吸引力不足的问题

职位吸引力不足&#xff0c;很有可能是因为对职位描述的太过平淡无奇&#xff0c;没办法引起求职者足够的关心和了解。HR应当更加深入地挖掘企业特色&#xff0c;通过精心撰写职位描述&#xff0c;来凸显出企业的发展潜力和品牌文化等亮点&#xff0c;使用更加精确的描述&#…

小间距LED显示屏的模组与箱体参数

随着显示技术的发展&#xff0c;小间距LED显示屏因其高清晰度和高亮度而越来越受到市场的欢迎。然而&#xff0c;对于许多用户来说&#xff0c;如何理解和选择小间距LED显示屏的参数可能是一个挑战。本文将详细介绍小间距LED显示屏的两大核心参数&#xff1a;模组参数和箱体参数…

装饰者模式实现和JDK中的应用

&#x1f3af; 设计模式专栏&#xff0c;持续更新中&#xff0c; 欢迎订阅&#xff1a;JAVA实现设计模式 &#x1f6e0;️ 希望小伙伴们一键三连&#xff0c;有问题私信都会回复&#xff0c;或者在评论区直接发言 装饰者模式 文章目录 装饰者模式&#x1f3af; 核心要点&#x…

【保姆级教程】基于OpenCV实现实时道路车道检测【附完整源码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

安装python,jupter notebook,anaconda换源

目标&#xff1a; 学会安装Anaconda实验环境&#xff0c;创建Anaconda虚拟环境 能够设置国内镜像源 设置好Jupyter Notebook的文件存储路径并学会基本用法 内容&#xff1a; 一、安装Anaconda 首先&#xff0c;打开Anaconda官方网站&#xff08;https://www.anaconda.com/…

stm32单片机个人学习笔记1(简单介绍)

前言 本篇文章属于stm32单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 STM32入门教程-2023版 细…

辛巴赔付到账,罗永浩退一赔三:直播带货终于往好方向卷了下…

因为快手顶流辛巴扔出的一颗重磅炸弹「被辛巴架火上烤&#xff0c;带货顶流圈快乱成一锅粥了……」&#xff0c;把直播带货行业藏在深处的淤泥炸出了水面。 原本表面看上去清澈、安静的水面&#xff0c;越来越浑&#xff0c;且还冒着火星子&#xff01;‍‍‍‍‍‍‍ 自从这个…

别让恶意刷票毁了你的项目,学会这6招防刷技巧!

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米,一个29岁,积极活泼的技术爱好者!今天想跟大家聊一聊,在做个人项目时,如何有效地防止“刷”行为。无论是刷票、刷流量,还是恶意请…

DPDK基础入门(十):虚拟化

I/O虚拟化 全虚拟化&#xff1a;宿主机截获客户机对I/O设备的访问请求&#xff0c;然后通过软件模拟真实的硬件。这种方式对客户机而言非常透明&#xff0c;无需考虑底层硬件的情况&#xff0c;不需要修改操作系统。 半虚拟化&#xff1a;通过前端驱动/后端驱动模拟实现I/O虚拟…

腾讯云2024年数字生态大会开发者嘉年华(数据库动手实验)TDSQL-C初体验

在2024年9月5-6日&#xff0c;有幸参加了腾讯云举办的2024年数字生态大会开发者嘉年华。 有幸体验了腾讯的多项黑科技和云计算知识。特别是在“增一行代码”互动展区&#xff0c;体验了腾讯云云计算数据库TDSQL-C技术并进行了动手实验。这些技术充分展示了腾讯在云计算的强大实…

Antd - Form 表单提交onfinish函数不生效

Antd - Form 表单提交onfinish函数不生效 问题复现问题修复 问题复现 const onFinish: FormProps<InvoiceTitleInfo>[onFinish] (values) > {console.log(values); } const rules [() > ({validator() {const address form.getFieldValue(address) || ;if (!ad…

安装MongoDB启动报错:找不到共享库文件libcrypto.so.10

查看依赖 ldd mongodb/bin/mongod MongoDB4.2.0需要依赖openssl10相关资源&#xff0c;必须先在Linux中安装openssl10。 执行命令&#xff1a;yum install compat-openssl10 下载完后最后执行ldd mongod看到文件都已经存在

MySQL -- 体系结构、索引结构

1 MySQL体系结构 英文版&#xff1a; 中文版&#xff1a; 以上图可知&#xff0c;MySQL的体系结构划分为以下4层&#xff1a; &#xff08;1&#xff09;网络接入层&#xff1a; &#xff08;2&#xff09;服务层&#xff1a; &#xff08;3&#xff09;存储引擎层&#x…

【软件测试】自动化测试-概念篇

&#x1f334;自动化 &#x1f6a9;自动化的概念 自动的代替人的行完成操作。 自动化在生活中处处可见 自动洒水自机&#xff0c;主要通上水就可以自动化洒水并且可以自动的旋转。 自动洗手液&#xff0c;免去了手动挤压可以自动感应出洗手液超市自动闸门&#xff0c;不需要手…