Java常见数据集合list、set、map

article/2025/9/19 9:18:02

线性表

由零个或者多个数据元素组成的有限序列。第一个元素无前驱,最后一个元素没有后继,其他元素有且只有一个前驱或者后继

栈、队列

栈Queue队列Stack
先进先出先进后出
LinkedList:可以用它来实现双向队列。PriorityQueue:基于堆结构实现,可以用它来实现优先队列。

线性结构数组和链表区别

定义优点缺点
数组顺序存储,存储元素连续查询快增删慢,增删需要挪动后面的元素
链表链式存储,存储不连续,每个元组知道其下一个元素的位置增删快查找慢,需要从第一个一直往后遍历直到找到要查的元素

JAVA数据集合

在这里插入图片描述

List

有序可重复,用户可以通过索引访问元素

ArrayListLinkedListVector
元素null可以可以最后一个元素后面的任何数组元素都为null
线程安全是(一个线程同时只能访问一个方法)
内存动态数组实现,连续存储空间链表(双向)存储,空间不连续存储矢量分量的数组缓冲区, 矢量的容量是这个数组缓冲区的长度,并且至少足够大以包含所有矢量的元素。
优点支持随机访问增删快,LinkedList 还可以用作栈、队列和双向队列。线程安全

set

无序不可重复,最多一个null值

treeSet基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 则为 O(logN)。
HashSet基于哈希表实现,支持快速查找,但不支持有序性操作。并且失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果是不确定的。
LinkedHashSet具有 HashSet 的查找效率,且内部使用双向链表维护元素的插入顺序。

Map

在这里插入图片描述

key-value键值对,不允许重复键

HashMapHashTableCurrentHashMapTreeMapLinkedHashMap
线程安全
键值可以为空不可以为空可以不可以可、
底层结构数组+链表(1.7,头插)/数组+链表+红黑树(1.8尾插)数组+链表分段数组+链表红黑树,每个key-value是一个节点。能够把他保存的记录按照键进行排序(默认升序),也可以自定义排序(重写比较器)继承了HashMap,内部维护了一个双向链表,保存了记录的插入顺序(accessOrder=false或者访问顺序accessOrder=true)
扩容8<链表长度<64,转为红黑树;数组默认长度为16,元素个数达到长度*0.75,扩容到两倍大。插入后扩容通过加同步关键字实现线程安全,但锁是对整个结构的锁,性能较差。插入后扩容。插入后扩容插入前扩容,同HashMap就红黑树添加元素

备注:fail-safe(hashtable)和fail-fast(hashmap)区别:
fail-fast机制是在遍历一个集合时,集合元素不能被改动,否则抛Concurrent Modification Exception异常(注意:这种机制在多线程情况下可能会有集合元素发生改动,但未被检查出错误的情况发生。fail-fast只能说是尽力去发现改动并抛出异常,因此此类迭代器应该仅适用于检测bug)
fail-safe机制是任何对集合结构的修改都会在另一个此集合的复制品上体现,因此不会抛Concurrent Modification Exception异常。因此该机制也有一定缺陷(1. 需要复制集合 2. 无法保证读取的数据是原集合中的数据,即可能出现在线程A遍历集合的过程中线程B,对集合中某一元素进行了修改,导致线程A可能读取到线程B所修改的数据,而原始的数据)


http://chatgpt.dhexx.cn/article/UsxDAfA8.shtml

相关文章

java数据集合

一&#xff09;Collection接口&#xff1a;存储单列数据&#xff1a; (1)List&#xff1a;单列有序集合&#xff08;可以重复&#xff09;&#xff1a; A、ArrayList&#xff1a;底层结构是数组&#xff0c;底层查询快&#xff0c;增删慢&#xff08;非线程安全&#xff09;&am…

windows VM12虚拟机安装苹果系统(Mac OX 10.11)

windows VM12虚拟机安装苹果系统(Mac OX 10.11) 本人最近需要使用苹果电脑生成请求文件&#xff0c;由于没有苹果电脑&#xff0c;只能安装个黑苹果对付一下了&#xff0c;以下是本人的经历。 首先需要工具 1、vm12安装包下载 提取码tcua&#xff1b; 2、unlocker208工具下载 提…

vm16安装macos12的详细配置

文章目录 版本情况macos安装unlock创建虚拟机虚拟机安装配置安装tools 优化部分参考文档部分 版本情况 VM16 macos 12.01 unlocker&#xff08;破解&#xff09; Github上的大佬Dr. Donk分享的Unlocker: https://github.com/DrDonk/unlocker/releases 资源相关链接&#xff1…

FileUtils中writeStringToFile和readFileToString的使用

使用FileUtils的前提必须先导入commons.io   jar包 maven 版本 <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.…

Java 使用FileUtils.copyFile复制文件

1、FileUtils.copyFile方法 copyFile方法有多种重载形式&#xff0c;下面截图只是其中比较简单的一种&#xff0c;详细见官方文档 2、业务代码&#xff1a; private File copyFile(Long baseTime, int orgId, int typeId, String sourcePath, String fileName) throws IOExce…

【Java基础知识 18】通过FileUtils.copyFile探索IO原理

目录 一、FileUtils.copyFile1、从实例出发2、还是蛮快的&#xff0c;探索源码一番... 二、FileChannel1、读操作2、写操作3、代码实例4、控制台输出 三、如何减少copy和上下文切换的次数&#xff1f;1、为什么不能舍弃内核空间这一步&#xff0c;直接读取到用户空间呢&#xf…

FileUtils工具类常用方法

文件操作工具类&#xff08;FileUtils&#xff09; 使用 apache 的commons-io包下的FileUtils&#xff0c;import org.apache.commons.io.FileUtils; 下载地址&#xff1a;http://commons.apache.org/proper/commons-io/download_io.cgi 官方API文档&#xff1a;http://com…

App分渠道打包工具

渠道包就是要在安装包中添加渠道信息&#xff0c;也就是channel&#xff0c;对应不同的渠道&#xff0c;例如&#xff1a;小米市场、360市场、应用宝市场等。 我们要在安装包中添加不同的标识&#xff0c;应用在请求网络的时候携带渠道信息&#xff0c;方便后台做运营统计&…

H5打包成app的在线工具

H5打包成APP&#xff0c;有两种方式&#xff0c;方式一是直接用网址打包&#xff0c;方式二是将H5文件打包到APP的资源文件里面。第一种方式的用户体验不是很好&#xff0c;因为这种APP在用户没有网络的情况下&#xff0c;打开APP就会变成白屏&#xff0c;因为这种远程网址调用…

网站打包成app,webapp在线打包工具推荐

最近因为需求&#xff0c;需要把移动端网页打包成APP&#xff0c;本人一直是做网站开发的&#xff0c;没想到现在的webapp打包能如此方便了&#xff0c;打包的时候只用提供网站链接就可以了&#xff08;原理应该是做一个app简单浏览器&#xff0c;然后默认打开你网站的链接&…

HTML一键打包IPA(苹果IOS应用)工具 网站打包 APP

工具简介 HTML一键打包IPA&#xff08;苹果应用&#xff09;工具可以把本地HTML项目或者网站打包为一个苹果应用IPA文件&#xff0c;无需编写任何代码&#xff0c;支持在苹果设备上安装运行。 打包工具群&#xff1a;429338543 下载地址&#xff1a; 点击进入下载页面 加群获…

HTML一键打包APK工具_安卓app封装_H5打包安卓APP

随着目前苹果Appstore审核越来越严格&#xff0c;每天平均上架1000个&#xff0c;下架3000个应用&#xff0c;想要上架苹果应用商店已经越来越困难了&#xff0c;反复修改审核上架&#xff0c;短则1-2周&#xff0c;长则几个月&#xff0c;并且游戏类应用上架目前极其困难。 因…

AndroidStudio如何打包APP

首先&#xff0c;点击AS工具栏的Build下面的“Generate Signed Build APK…” 然后在弹出的框内选择APK &#xff08;Android App Bundle&#xff1a;用于通过 Google Play 发布的应用&#xff0c;需要升级到AS 3.2 以上版本才支持App Bundle格式&#xff1b; APK&#xff1a;…

网站项目打包成app

web项目打包app 这次打包app项目&#xff0c;主要用到的软件是HBuilderX&#xff1b; HBuilderX下载网址&#xff1a;https://www.dcloud.io/hbuilderx.html HBuilderX&#xff1a;可直接将网页打包成手机端app&#xff0c;可以有安卓和苹果两种安装包&#xff0c;这次我们主…

Flutter项目打包生成APK

flutter实现安卓打包&#xff1a;&#xff08;以安卓Studio工具为例&#xff09; &#xff08;1&#xff09;创建key.jks文件 在安卓studio中调整至项目路径&#xff0c;例如&#xff1a; 我的项目所在地 E:\Flutter\fluttershuqi>然后输入命令&#xff1a; keytool -ge…

Android App打包流程

简单总结下app打包的流程&#xff1a; 第一步&#xff1a;aapt 为res目录下的资源生成R.java文件&#xff0c;同时为AndroidManinfest.xml生成Manifest.java文件 第二步&#xff1a;aidl 把项目中自定义的aidl文件生成相应的Java代码文件 第三步&#xff1a;javac 把项目中所…

iOS app打包过程

1.点击Product - Archive 2.选择Development 点击Next 3.什么都不选&#xff0c;点击下一步 4.选择第一个&#xff0c;点击next 5.选择Export 6.拿到.ipa文件&#xff0c;导出成功&#xff01; 7.接下来&#xff0c;可以将ipa文件拖到蒲公英进行发布

Flutter 打包APP (Android IOS)

打包Android apk 参考 https://flutter.dev/docs/deployment/android https://flutterchina.club/android-release/ Flutter项目打包成安卓apk详解来了&#xff08;解决安装没网络问题&#xff09; 【Flutter 专题】39 图解 iOS 打包 IPA 文件 Flutter - 打包APK、IPA 及 IOS上…

【uniapp小程序】—— APP项目云打包(安卓)

&#x1f341; 前言 之前小程序系列文章写了配置页面和封装自定义组件&#xff0c;这次写一下开发完成我们的项目后&#xff0c;如何进行打包安装。 本文主要讲述的是使用 uniapp打包安卓。 &#x1f342; 正文 第一步&#xff1a;查看自己的项目的基础配置 第二步&#xff1a…

前端打包利器,webpack工具,app打包工具

什么是 webpack&#xff1f; webpack是近期最火的一款模块加载器兼打包工具&#xff0c;它能把各种资源&#xff0c;例如JS&#xff08;含JSX&#xff09;、coffee、样式&#xff08;含less/sass&#xff09;、图片等都作为模块来使用和处理。 我们可以直接使用 require(XXX) 的…