Java 中的 非并发容器

news/2024/5/8 11:10:33/文章来源:https://blog.csdn.net/JAVAlife2021/article/details/130081445

1.四大类容器

java中容器主要有四大类,如下图所示

image-20230411123331485

2.非并发容器

1) List 类

List 类 不支持并发的有 ArrayList 与 LinkedList

ArrayList

底层实现

ArrayList 底层为 数组,由于数组的特性,非常适合用于 查询多,增删改的业务场景

实例化时创建了一个Object类型的数组(Java泛型只存在于编译时期)

扩容

ArrayList 底层为数组,数组一但初始化无法扩容,所以ArrayList底层扩容是通过创建一个新的数组,再将原有数组的数据拷贝过去,拷贝数据底层用的是 System.arraycopy。新数组的大小 = 原有数组的大小 + 原有数组的大小右移一位 近似1.5倍。

image-20230411124536298

image-20230411124556336

创建新的数组后使用 System.arraycopy 数据拷贝

image-20230411124634966

LinkedList

底层实现

LinkedList 底层实现为双向链表,由一个个Node串联起来 ,适合 增删多,查找少的场景(每次查找都需要从头开始遍历,直到找到目标为止)

image-20230411125554627

Node 的三个参数 : 元素,前指针,后指针

image-20230411125637925

扩容

LinkedList 不存在扩容这么一说,如果说LinkedList的上限,那么就是int类型的上限。新增元素时,创建一个新的Node节点,将新节点的prev指针 指向上一个节点,同时将上一个节点的 next指针 指向 新的Node节点

image-20230411125454657

image-20230411130032333

2)Set 类

HashSet

底层实现

HashSet 底层基于HashMap,HashMap 为 k-v 键值对类型,而HashSet 的 value 为 固定值 PRESENT (Object)

image-20230411130454700

扩容

由于HashSet 是在HashMap的基础上实现的,底层对元素的增删改都是对 引用的 HashMap 进行操作,因此扩容机制与HashMap一致

去重

Set 类的集合不能有重复元素,HashSet通过Hash表去重

TreeSet

底层实现

TreeSet 底层维护了 一个 TreeMap,通过Map的 key 来存储元素

image-20230411131140190

扩容

由于TreeSet 是在TreeMap的基础上实现的,底层对元素的增删改都是对 引用的 TreeMap进行操作,因此扩容机制与TreeMap一致

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

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

相关文章

GitHub使用教程

0 简介 GitHub 是基于 Git 的一个代码托管网站。开发者可以将代码在 GitHub 上开源,可以浏览其它项目的代码,fork 到自己名下做修改,clone 回本地(没有访问权限的 private repo 除外)使用,也可以发起 pull …

centos7.2-rh7.2安装docker的问题

目录1. 环境2. 问题排查2.1 failed to start daemon: error initializing graphdriver: overlay2: the backing xfs filesystem2.2 centos7.2内核bridge.ko问题2.3 kernel:unregister_netdevice: waiting for ... to become free. Usage count 12.4 离线安装依赖问题1. 环境 …

基于PaddlePaddle的词向量实战 | 深度学习基础任务教程系列

词向量是自然语言处理中常见的一个操作,是搜索引擎、广告系统、推荐系统等互联网服务背后常见的基础技术。 在这些互联网服务里,我们经常要比较两个词或者两段文本之间的相关性。为了做这样的比较,我们往往把词表示成计算机适合处理的方式。最…

windows上源码安装opencv-python(opencv源码安装)

opencv源码安装记录 前言 因为我要用opencv的GStreamer功能&#xff0c;但是通过python的 pip install opencv-python 是没有这个功能的。 所以需要通过源码安装opencv-python&#xff0c;直接从 opencv 源码包去安装<注意并非opencv-python源码包>&#xff0c;然后倒…

面试篇-Java输入输出三兄弟大比拼:IO、NIO、AIO对比分析

1、Java I/O发展史 Java IO&#xff08;Input/Output&#xff09;是Java语言中用于读写数据的API&#xff0c;它提供了一系列类和接口&#xff0c;用于读取和写入各种类型的数据。下面是Java IO发展史的简要介绍&#xff1a; JDK 1.0&#xff08;1996年&#…

如何在大厂做好架构演进?

1 架构演进的定义 1.1 定义 通过设计新的系统架构(4R)&#xff0c;来应对业务和技术的发展变化。 1.2 关键点 新架构新的复杂度 1.3 目的 应对业务和技术的发展变化后带来新的复杂度。 案例 淘宝去IOE&#xff0c;是因为业务发展大了后&#xff0c;IOE的成本和可控性难…

MySQL SQL优化 【建议熟读并背诵】

插入数据 批量插入数据 insert into tb_test values(1,Tom),(2,Cat),(3,Jerry);手动控制事务 start transaction; insert into tb_test values(1,Tom),(2,Cat),(3,Jerry); insert into tb_test values(4,Tom),(5,Cat),(6,Jerry); insert into tb_test values(7,Tom),(8,Cat…

事实胜于雄辩,苹果MacOs能不能玩儿机器/深度(ml/dl)学习(Python3.10/Tensorflow2)

坊间有传MacOs系统不适合机器(ml)学习和深度(dl)学习&#xff0c;这是板上钉钉的刻板印象&#xff0c;就好像有人说女生不适合编程一样的离谱。现而今&#xff0c;无论是Pytorch框架的MPS模式&#xff0c;还是最新的Tensorflow2框架&#xff0c;都已经可以在M1/M2芯片的Mac系统…

【计算机网络-应用层】域名系统 DNS、文件传输协议 FTP、电子邮件

文章目录1 域名系统 DNS1.1 域名结构1.2 域名服务器1.2.1 根域名服务器1.2.2 顶级域名服务器1.2.3 权限域名服务器1.2.4 本地域名服务器1.3 域名解析过程1.3.1 递归查询1.3.2 递归与迭代相结合查询1.3.3 本地域名服务器的高速缓存2 文件传输协议 FTP2.1 主动模式&#xff08;建…

CSDN,感谢遇见【我的一周年创作纪念日】

机缘 第一次遇见CSDN已经是7年前的事了&#xff0c;那时的我还是一名初二的学生&#xff0c;由于沉迷于玩具战争这款游戏&#xff08;很遗憾这款游戏已经停服&#xff09;&#xff0c;里面有许多大佬利用各种手段去开挂&#xff0c;所以我意外的接触到了浏览器抓包等计算机技术…

Kafka消费者组和分区再均衡

应用程序使用KafkaConsumer向Kafka订阅主题&#xff0c;并从订阅的Topic上接收消息。 要想知道如何从Kafka读取消息&#xff0c;需要先了解消费者和消费者组的概念。 1、消费者和消费者组 原因&#xff1a;假设我们有一个应用程序需要从一个Kafka Topic中读取消息并验证&…

C++实现前缀树

文章目录1. 什么是前缀树2. 前缀树的实现2.1 前缀树的基本结构2.2 插入2.3 word出现了几次2.3 word作为前缀出现几次2.4 删除1. 什么是前缀树 假设这里有一个字符串数组&#xff0c;和一个树的根结点&#xff1a; 这个结点的pass意思是&#xff1a;有几个字符通过了这个结点。…

(学习日记)2023.4.10

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Jetpack Compose之对话框和进度条

概述 对话框和进度条其实并无多大联系&#xff0c;放在一起写是因为两者的内容都不多&#xff0c;所以凑到一起&#xff0c;对话框是我们平时开发使用得比较多的组件&#xff0c;像隐私授权&#xff0c;用户点击删除时给用户提示这是一个危险操作等&#xff0c;进度条的使用频…

npm与node版本不匹配问题解决思路

1.报错 npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: ‘electron-packager17.1.1’, npm WARN EBADENGINE required: { node: ‘> 14.17.5’ }, npm WARN EBADENGINE current: { node: ‘v12.22.9’, npm: ‘8.5.1’ } npm WARN EBADENGINE } np…

3款免费好用的电脑录屏工具

案例&#xff1a;电脑录屏工具哪款免费又好用&#xff1f; “我想要挑选一款适合自己的好用的电脑录屏软件&#xff0c;但是我尝试了很多款录屏软件结果都不尽人意。免费版的软件功能少&#xff0c;录制效果差&#xff0c;想要高级功能需要付费解锁。想问问大家有没有免费好用…

Mybatis操作Oracle中的Clob和Blob字段

文章目录Mybatis操作Oracle中的Clob和Blob字段1. Oracle中创建测试的表结构&#xff1a;Byte_Array_Test2. Mybatis配置MapperXml&#xff0c;用Map<String, Object>接受Clob和Blob的数据&#xff0c;如下图&#xff1a;3. 代码中获取Clob和Blob的值3-1 接收Blob和Clob数…

每日做题总结——day01

目录 选择题 for循环 指针数组 位段 getchar 大小端存储 进制与格式控制符 位运算 数组指针 二维数组的存储 计算二进制中1的个数 斐波那契数列求递归次数 编程题 删除公共字符 排序子序列 倒置字符串 选择题 for循环 解析&#xff1a;该题主要看for…

el-form, 时间选择器,不管选择什么时间范围,值一直是当月一号

yyyy-MM-DD 修改为 yyyy-MM-dd 就好了&#xff0c;bug千奇百怪 修改前 修改后

极致低延迟收集器ZGC探索——亚毫秒级,常数级暂停O(1)原理

ZGC 收集器 ZGC收集器&#xff08;Z Garbage Collector&#xff09;是由Oracle公司为HotSpot JDK研发的&#xff0c;最新一代垃圾收集器。有说法使用这个名目标是取代之前的大部分垃圾收集器&#xff0c;所以才叫ZGC&#xff0c;表示极致的Extremely&#xff0c;或者最后的&am…