java 集合框架-collection(单列集合)

news2024/9/24 9:25:25

        在编程语言中,我们必然少不了存储数据的容器,虽然我们有数组,但是数组是连续的开辟处一块连续的内存空间,如果数据过大会无法存储完,数据量小,会浪费空间,所以我们需要使用集合存储数据,而在Java中list和set是我们最常用的集合,它们都属于Collection接口的子接口。

一、Collection 接口(单列集合)

1.子接口

1.1 List接口
1.1.1 特点

        List的特点是有序,允许重复(值不唯一)

1.1.2  常见实现类
(1).线程不安全
ArrayList

1.数据结构:数组:Object[ ] elementData

源码:

2.使用场景:查找、遍历效率高,插入、删除效率低

3.扩容方式:

        集合相比数组的优势之一就是其内存储空间可变化,那么它是如何变化的,而且它的数据结构是一个Object数组,但数组并没有完成初始化,又在什么时候完成初始化。且容量不足时又如何扩容呢。它们都与其内部定义的成员变量(默认数组),以及无参,有参构造方法,add()方法有关,下面我们先观察源码

        内部定义的成员变量与数组:

        无参构造方法源码:

         有参构造方法源码:

            add()方法: 

(1).初始化:

  • 无参构造方法,数组的初始化容量为0,添加第一个元素时,数组容量扩容为10
  • 有参构造方法,数组按指定容量初始化

(2).容量不足时: 按照数组现有容量的1.5倍扩容

LinkedList

1.数据结构:链表:双向链表

源码: 

2.使用场景:插入、删除效率高,查找效率低

3.扩容方式:链表动态扩容,每添加一个节点,链表动态扩容一个元素空间

        观察源码可知,当我们调用add方法添加元素时,其就会动态的添加一个节点,链表动态的扩容,并且如果是add()方法,或者 addLast()方法添加到链表尾部(尾插法),如果是addFirst()方法就是动态添加到头部(头插法)。

                此类为我们提供了不同参数的add方法,也可根据参数,动态的将元素添加到任意位置

(2).线程安全
Vector

1.数据结构:数组:Object[ ] elementData

 源码:

 

2.扩容方式

(1).初始化:

  • 无参构造方法,数组的初始化容量为10
  • 有参构造方法,数组按指定容量初始化

(2).容量不足时:按照数组现有容量的2倍或指定容量值(capacityIncrement)进行扩容

3.线程安全:通过“synchronized”同步锁实现 

Stack

1.stack是vector的子类,数据结构与扩容方式与vector相同

2.特点:先进后出FILO  or 后进先出LIFO

CopyOnWriteArrayList

1.数据结构:数组:Object[] array

源码:

2.线程安全:

  • 通过“ReentrantLock”锁实现
  • CopyOnWrite:"写入"操作时,先进行数组复制,然后在新数组中进行写入操作,然后替换;允许读写同时进行;

1.2 Set接口 

1.2.1 特点

        set的特点是无序,不允许重复(值唯一)

1.2.2 常见实现类
HashSet

1.特点:无序

2.数据结构:HashMap

LinkedHashSet

1.特点:有序

2.数据结构:LinkedHashMap

TreeSet

1.特点:自动排序

2.数据结构:TreeMap

1.3 Queue接口 

1.3.1特点

        Queue的特点是先进先出FIFO,队头出队,队尾入队;

1.3.2常见实现类
(1).线程不安全
LinkedList

        LinkedList基于“双向链表”实现的队列

PriorityQueue

        PriorityQueue基于“堆”实现的优先队列    

(2)线程安全
BlockingQueue

阻塞队列:

  • ArrayBlockingQueue(有界)
  • LinkedBlockingQueue(无界)

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

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

相关文章

Qt创建自定义组件并且promote to之后导致编译错误(CMake)

创建自定组件并且加入到全局(勾选"Global include"选项)后,重新编译,元对象编译器生成的ui_xxxx.h文件中会新加入自定义组件的头文件: 如图所示,编译器提示找不到自定义组件的头文件: Solution: 在CMakeL…

leetcode日记(48)排列序列

这道题想到了规律就不算难&#xff0c;列了好几个示例想出的规律&#xff0c;试着排序几个就会了 class Solution { public:string getPermutation(int n, int k) {string result;int m1;int i1;for(i;i<n;i) m*i;i--;int pm/i;string s;for(int j0;j<n;j) s.append(to_…

NCRE3 2-1 网络总体设计基本方法

这部分记忆的比较多 概览 设计网络建设总体目标确定网络系统方案设计原则网络系统总体设计设计网络拓扑结构进行网络设备选型网络系统安全设计 设计网络建设总体目标 这部分视频没说到 确定网络系统方案设计原则 这部分视频没说到 网络系统总体设计 核心层网络结构设计 …

“机器说人话”-AI 时代的物联网

万物互联的物联网愿景已经提了许多年了&#xff0c;但是实际效果并不理想&#xff0c;除了某些厂商自己的产品生态中的产品实现了互联之外&#xff0c;就连手机控制空调&#xff0c;电视机和调光灯都没有实现。感觉小米做的好一点&#xff0c;而华为的鸿蒙的全场景&#xff0c;…

以flask为后端的博客项目——星云小窝

以flask为后端的博客项目——星云小窝 文章目录 以flask为后端的博客项目——星云小窝前言一、星云小窝项目——项目介绍&#xff08;一&#xff09;二、星云小窝项目——项目启动&#xff08;二&#xff09;三、星云小窝项目——项目结构&#xff08;三&#xff09;四、谈论一…

singleton 配置

​​​​​​​Is there a way to connect to a specific instance of Oracle server?https://stackoverflow.com/questions/70617760/is-there-a-way-to-connect-to-a-specific-instance-of-oracle-server 1.。。。。。。。。。。。RAC下 通过instance name 控制&#xff0c;…

react中配置路径别名@

1.说明 在react项目中想要使用代替“src/”需要在项目根目录下配置两个文件&#xff0c;craco.config.js和sconfig.json&#xff1b; craco.config.js配置文件是用于项目解读为“src/” jsconfig.json配置文件是用于vsCode在编辑过程是输入后可以将src下的文件目录进行自动联…

PS启动提示Adobe Creative Cloud丢失或损坏。您可以尝试修复来解决这个问题,如何解决

一般为找到这个路径下C:\Program Files (x86)\Common Files\Adobe\Adobe Desktop Common\ADS的Adobe Desktop Service.exe文件。如果不在C盘也可以直接搜索其他盘找到此文件。 直接删除此文件即可解决&#xff0c;如果删除不了可以进任务管理器先结束进程再删除。鼠标右键结束任…

npm上传自己的包以及发布过程遇到的问题

大家好&#xff0c;我是前端追寻路上的【酱酱仔】 作为在前端领域不断探索的一员&#xff0c;在此记录开发中遇到的问题&#xff0c;如果你也遇到了相同的问题&#xff0c;希望本文对你有帮助。 前提&#xff1a;本文涉及的命令都是在要发布的包的根目录下执行的&#xff0c;在…

自训练和增量训练word2vec模型

1、自己准备训练语料文件 根据自己的业务场景准备训练数据&#xff0c;比如用户在商城上的同购行为序列或同浏览行为序列。 我们希望通过自己训练业务相关的语料word2vec模型来获得词嵌入、词相关性查询等。 1.1 准备语料库文件 # 示例&#xff1a;准备自己的一个大规模的语…

学习记录day16—— 数据结构 双向链表 循环链表

双向链表 1、概念 1&#xff09;就是从任意一个节点既能存储其前驱节点&#xff0c;又能存储后继节点 2)结构体中增加一个指向前驱节点的指针 //定义数据类型 typedef int datatype;//定义节点类型 typedef struct Node {union {int len;datatype data;};struct Node *prio; …

k8s中部署Jenkins、SonarQube、StorageClass部署流程

部署Jenkins 系统环境&#xff1a; • kubernetes 版本&#xff1a;1.23.3 • jenkins 版本&#xff1a;2.172 • jenkins 部署示例文件 Github 地址&#xff1a;https://github.com/my-dlq/blog-example/tree/master/jenkins-deploy 一、设置存储目录 在 Kubenetes 环境下…

Kolla-Ansible的确是不支持CentOS-Stream系列产品了

看着OpenStack最新的 C 版本出来一段时间了&#xff0c;想尝个鲜、用Kolla-Ansible进行容器化部署&#xff0c;结果嘛。。。 根据实验结果&#xff0c;自OpenStack Bobcat版本开始&#xff0c;Kolla-Ansible就适合在CentOS系列产品上部署了&#xff0c;通过对 Bobcat和Caracal…

llama模型,nano

目录 llama模型 Llama模型性能评测 nano模型是什么 Gemini Nano模型 参数量 MMLU、GPQA、HumanEval 1. MMLU(Massive Multi-task Language Understanding) 2. GPQA(Grade School Physics Question Answering) 3. HumanEval llama模型 Large Language Model AI Ll…

Python教程(一):环境搭建及PyCharm安装

目录 引言1. Python简介1.1 编译型语言 VS 解释型语言 2. Python的独特之处3. Python应用全览4. Python版本及区别5. 环境搭建5.1 安装Python&#xff1a; 6. 开发工具&#xff08;IDE&#xff09;6.1 PyCharm安装教程6.2 永久使用教程 7. 编写第一个Hello World结语 引言 在当…

微服务实战系列之玩转Docker(六)

前言 刚进入大暑&#xff0c;“清凉不肯来&#xff0c;烈日不肯暮”&#xff0c;空调开到晚&#xff0c;还是满身汗。——碎碎念 我们知道&#xff0c;仓库可见于不同领域&#xff0c;比如粮食仓库、数据仓库。在容器领域&#xff0c;自然也有镜像仓库&#xff08;registry&…

【案例】使用React+redux实现一个Todomvc

About 大家好&#xff0c;我是且陶陶&#xff0c;今天跟大家分享一个redux的todoList案例&#xff0c;通过这个案例能够快速掌握redux的基本知识点&#x1f339; ❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…

超声波眼镜清洗机什么牌子好?入门级家用超声波清洗机推荐

戴眼镜的人一定都有对眼镜店的超声波清洗机清洗过的眼镜惊讶过&#xff0c;洗过之后光洁如新&#xff0c;镜片清澈透亮。最初笔者以为超声波清洗机只能用来清洗眼镜&#xff0c;没想到它还能清洗很多小玩意儿。目前市面上的超声波清洗机品牌繁多&#xff0c;今天笔者来教教大家…

QtCreator和QtDesignStudio最佳实践

一、QTC和QDS工作流概述 很多初学者对 QDS(Qt Design Studio) 和 QTC(Qt Creator)如何配合经常存有疑问&#xff0c;本文介绍具体的工作流程。 工作流程 1.产品设计&#xff1a;通过PS、Figma、XD等专业工具设计页面视觉和原型。 2.QDS 原型制作&#xff1a;导入设计源文件、…

计算机网络-配置双机三层互联(静态路由方式)

目录 交换机工作原理路由器工作原理路由信息表组成部分路由器发决策 ARP工作原理配置双机三层互联&#xff08;静态路由方式&#xff09; 交换机工作原理 MAC自学习过程 初始状态&#xff1a; 刚启动的交换机的MAC地址表是空的。 学习过程&#xff1a; 当交换机收到一个数据帧…