Java中的基本容器知识你真的了解过吗?

news2024/11/19 19:19:29

前言:尽量使用简单易懂的通俗语言让大家初步了解各个重要的知识点。博学之,审问之,慎思之,明辨之,笃行之。

 

一、容器(Collection)

 

Collection容器其实是用来存储独立元素的各种数据结构,如图所示。主要是Set、List、Queue等数据结构,又分为不同的分支具有部分不同的属性和特性。Collection是整个集合框架的基础,提供了维护一组对象的基本接口

 

1、ArrayList

ArrayList其实就是动态数组或可扩容数组,底层也是数组实现,基本容量为10,扩容机制为(size*1.5),即每次扩容都是上一次的1.5倍。这也就导致如果数据量较大时,进行写入数据会较慢,因为需要进行不断的扩容。

 

2、LinkedList

LinkedList是顺序访问结构,也就是链表,内部实现为双向列表,因此在头尾增删数据会比较迅速,随机插入则需要遍历。

 

3、Vector

Vector类似于ArrayList,但是扩容机制不同,它的扩容机制默认为2倍,且相比之下是线程安全的。因为大多数Vector的方法是synchroization(同步),而ArrayList的方法是不同步的。且Stack为Vector的子类。

 

 二、Map类

 

1、HashMap

HashMap是最常用的Map结构,通常用来存储K-V键值对形式的数据,且用数组来存储键值对,根据Key的hashcode来决定数组下标。且目前版本的JDK,HashMap的底层实现是通过数组+树+链表的形式。一般只有当一个Key对应多个值,使得该hashcode下标对应的链表超过阈值时,会将链表重构为红黑树。查找的时间复杂度由链表的O(n)变成红黑树的O(log2n)。

其默认容量是16,且扩容为size*2,且一定为2的指数。

 

 2、LinkedHashMap

与HashMap相比,LInkedHashMap内部维护了一个双向链表,使得存储的数据是有序的,而HashMap一般是无序的。且该双向链表可以看做是环形的。

 

 

 3、HashTable

HashTable与HashMap类似,但是有以下不同点:

1、HashMap允许存储有且仅有一个Null值作为Key,HashTable不可以。

2、HashTable被Sybchronized修饰,意味着它的实现是线程安全的,HashMap则不是。

3、HashTable的默认容量是11,扩容机制为size*2+1

 

 4、TreeMap

类似于HashMap,不同点在于实现lSortMap接口,可以按顺序或自定义顺序进行遍历。

 

 三、Set(集合)

 

1、HashSet

集合的两个特性:

1、HashSet里不能有重复的元素

2、最多只允许有一个Null。

 且HashSet实际上不是线程安全的,且存储的数据也是无序的。

2、LinkedHashSet

与HashSet相比,LinkedHashSet则是可以维护插入元素的顺序,因为其内部有双向链表进行对数据的维护。

3、TreeSet

TreeSet具有HashSet的所有特性,并且还能够进行排序,可以通过实现Comparator(比较器)来实现排序。

四、Queue

 

1、BlockingQueue

多线程环境下,经常使用的“生产者-消费者”模式,负责生产的线程将是生产的资源放入一个共享容器,并且由消费者取出。那么这个容器一般可以是Queue或者Stack。阻塞队列可以在仓库满时把生产线程挂起,在仓库为空时把消费者线程挂起。

 

2、ArrayBlockingQueue

ArrayBlockingQueue是基于数组实现的有界阻塞队列,满足FIFO的特性,是一个典型的有界缓冲,数组大小是固定的,确定就无法再更改了。

 

3、LinkedBlockingQueue

LinkedBlockingQueue是基于链表实现的,且可以指定容量,具有两份重入锁,对应取值与存值。

 

4、PriorityBlockingQueue

PriorityBlockingQueue不是一个FIFO队列,需要提供一个Comparator,或者Comparable接口,队头元素为最小的元素。它也是用数组实现的最小堆结构。

发文不易,恳请大佬们高抬贵手!


点赞:随手点赞是种美德,是大佬们对于本人创作的认可!


评论:往来无白丁,是你我交流的的开始!


收藏:愿君多采撷,是大佬们对在下的赞赏!

 

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

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

相关文章

CPU相关概念:物理cpu数、核数、逻辑cpu数,12核20线程实例分析

文章目录 0. 写此篇博客的原因1. 物理CPU,核,逻辑CPU概念1.1 内核工作方式1.2 超线程1.3 什么是大小核 2. CPU信息的查询方法2.1 Windows下查询CPU信息的方法2.2 Linux下查询CPU信息的方法方法一:lscpu 整体查看方法二:分别查看 3…

思享工具箱,各种工具汇总

站长,开发者常用在线工具集合 - 思享工具箱 思享工具箱,各种工具汇总 https://tool.4xseo.com/ JSON工具 Json格式化 Json格式化(上下) Json格式化(左右) Json在线压缩转义 Json生成C#实体类 Json生成Java实体类 Json生成Go结构…

戴尔Alienware x15R1 R2原厂win11系统带F12 Support Assist OS Recovery恢复功能

戴尔Alienware x15R1 x15R2原厂win11系统带F12 Support Assist OS Recovery恢复功能 恢复各机型预装系统,带所有dell主题壁纸、dell软件驱动、带戴尔SupportAssist OS Recovery恢复功能,一次性恢复成新机状态,并且以后不用重装系统&#xff…

OpenGL(七)——摄像机

目录 一、前言 二、摄像机空间 2.1 摄像机位置 2.2 摄像机方向 2.3 右轴 2.4 上轴 2.5 LookAt观察矩阵 三、视觉移动 3.1 自由移动 3.2 移动速度 3.3 视觉移动 3.4 缩放 四、摄像机类 一、前言 之前3D物体已经有了,如何在观察空间中随意移动去“游览”3D物…

三维数据学习笔记:ply数据内容介绍

目录 前言1. 三维数据的组成1.1 点云数据1.2 网格数据 2. ply数据内容2.1 属性2.1.1 文本描述属性2.1.2 数据描述属性2.1.2.1 顶点(vertex)2.1.2.2 面(face)2.1.2.3 相机(camera) 2.2 数据2.2.1 顶点(vertex)2.2.2 面(face)2.2.3 相机(camera) 3. 示例3.1 示例13.2 示例2 前言 …

中盐集团:加快推进数智化转型,引领盐行业高质量发展

2022年无论对党和国家,还是对中盐集团,都是极不平凡、极为重要的一年。 这一年,党的二十大胜利召开,在“两个一百年”奋斗目标的历史交汇期,描绘了以中国式现代化全面推进中华民族伟大复兴的宏伟蓝图,开启了…

chatgpt国内能用吗?详细解读gpt的使用方法

chatgpt国内能用吗?Chat GPT是一种自然语言处理技术。它基于深度神经网络,并使用Transformer模型进行预测和生成。Chat GPT是OpenAI公司的一项人工智能技术,并在自然语言处理领域拥有广泛的应用。今天我们就来详细的聊聊国内能不能使用这个问…

Unity3D:内置着色器的用途和性能

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 内置着色器的用途和性能 Unity 中的着色器是通过__材质__来使用的,材质本质上结合了着色器代码与纹理等参数。此处提供了关于着色器/材质关系的深入说明。 当选择材质…

PPP报文解析与代码封装分享

一、简介: PPP(Point-to-Point Protocol点到点协议),属于数据链路层协议,这种链路提供全双工操作,并按照顺序传递数据包。 PPP协议是一个协议集包含:LCP(Link Control Protocol&am…

DDR3学习(一)

I.MX6U-ALPHA开发板上带有一个256MB/512MB的DDR3内存芯片,一般Cortex-A芯片自带的RAM很小,比如I.MX6U只有128KB 的 OCRAM。 如果要运行Linux的话完全不够用,所以需要外接一片RAM芯片,I.MX6U 支持 LPDDR2、LPDDR3/DDR3,…

互联网陪诊系统功能方案

互联网陪诊系统是一款为用户提供陪同患者到医院就医全程陪同,排队约号,排队检查,排队缴费,取送结果,代办买药,代办问诊等。 业务线上预约平台,让客户享受到最为专业的医院助医服务. 功能介绍 专…

卫星下行链路预算模型(未完待续)

卫星下行链路预算模型 1. 接收端天线模型 简单一些,考虑地球同步卫星多波束通信系统,波束指向固定。波束数量为 N b N_b Nb​. 波束中心在地面的位置可以用经度向量和纬度向量表示: P ⃗ l g [ l 1 , l 2 , . . . , l N b ] P ⃗ l a [ a 1 , a 2 …

Three.js教程:访问几何体对象的数据

推荐:将 NSDT场景编辑器 加入你的3D工具链 其他系列工具: NSDT简石数字孪生 访问几何体对象的数据 实际开发项目的时候,可能会加载外部模型,有些时候需要获取模型几何体的顶点数据,如果想获取几何体的顶点数据首先要熟…

C++拷贝构造函数---理解(配图文代码)

序: 说实话,博主卡了一天,哎,老了。。。。理解能力不行。有时候还想着先跳过把,结果下班后,还在纠结是不是自己打开的方式不对,这不,刚理解了点,回来写下笔记&#xff0c…

Vue+TS开发定长虚拟列表

1.定长虚拟列表 定义:虚拟列表也有叫无限滚动的,创建一个滚动列表来渲染大量数据 使用场景有大量数据需要渲染时。 **解决了什么问题?**大量数据需要渲染,例如Vue传统使用V-for遍历会创建大量Node节点,对于内存和渲染…

【AI 导航网站】为了更好的收集 AI 资源,我开发了一个 AI 导航网站

AI 导航网站 目前 AI 应用正呈迸发式增长,然而一个人获取资源的途径有限,对于目前存在的AI工具不能很好的收集总结,所以基于此,我开发了这个一个AI导航网站,希望通过它,收集出目前存在的热门的AI应用&…

(一)Springcloud-OpenFeign原理之集成改造原生Openfeign与简单使用

文章目录 1.和原生Openfeign的关系2.Springcloud-Openfeign的改造2.1 改造目标2.2 改造内容2.2.1 集成到Spring2.2.2 替换构造组件 2.3 初步集成使用2.4 支持的扩展点 文章将会介绍Springcloud-Openfeign对原生Openfeign的改造原因及方式,最后提供简单的使用案例及扩…

实验一 进程管理与进程同步

实验一 进程管理与进程同步 实验目的: 了解进程管理的实现方法,理解和掌握处理进程同步问题的方法。 实验内容: 实现银行家算法、进程调度过程的模拟、读者-写者问题的写者优先算法。 实验步骤: 1.银行家算法流程图 &…

Springboot +Flowable,任务认领和回退(一)

一.简介 有的时候,一个任务节点会存在多个候选人,例如:张三提交一个任务,这个任务即可以由李四处理,又可以由王五处理,那么针对这种多个任务候选人的情况,该如何处理? 二.绘制流程…

Java线程池及其实现原理

线程池概述 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机…