一文学完Java集合框架
Java集合框架主要包括List、Set、Map接口,分别表示列表、集合、健值对。
接下来对照着上图,从上到下依次介绍各个接口、抽象类、实现类,以及辨析兄弟类的区别。
一、最抽象的接口——Collection
它继承了Iterable接口,实现了iterator()方法,即实现了“迭代器模式”。
二、列表接口——List
List接口和Collection接口的区别在于,它有很多包含index参数的方法,即可以在数组的某个位置插入、删除、修改元素。
Vector、ArrayList、Stack、LinkedList的区别:
- Vector线程安全,但在多线程环境下一次只能有一个线程访问
- ArrayList是普通的列表,底层用数组实现
- Stack是栈,遵循“先进后出,后进先出”原则
- LinkedList是链表,底层用双向链表实现
三、健值对接口——Map
因为Set的实现类大多基于Map的实现类来实现的,因此先介绍Map接口。
HashMap、LinkedHashMap、WeakHashMap、Hashtable、Properties、TreeMap的区别:
- HashMap即无序的散列表,通过hash(key)来获取数组的下标,然后在数组或红黑树中通过equals方法来找到对应的节点,是最常用的线程不安全的Map实现类
- LinkedHashMap在HashMap的基础上,使用双向链表把节点连接起来,使得输入顺序和输出顺序保持一致
- WeakHashMap的Entry实现了WeakReference接口,这意味着key是弱引用,当垃圾收集器发现它时就会回收
- Hashtable类似Vector,线程安全,但一次只能有一个线程访问,性能奇低
- Properties继承了Hashtable,用于读取配置文件
- TreeMap是有序的散列表
四、集合接口——Set
Set接口和Collection接口的方法是一样的。
HashSet、TreeSet、LinkedHashSet的区别:
- HashSet即使用hash函数来进行映射的,底层是用HashMap实现的
- TreeSet是有序的集合,底层使用TreeMap来实现
- LinkedHashSet在HashSet的基础上保持了输入和输出顺序一致,底层用的是LinkedHashMap
五、总结
在Java开发当中,集合框架是最常用的数据结构,了解并掌握它们至关重要,最常用的如ArrayList、HashMap、HashSet,针对线程安全集合类有CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap(本文未涉及,感兴趣自己查阅资料)。
相关文章
- Git统计项目成员代码提交量
目录 一、前言 二、Git Bash 三、统计信息 1.统计某项目中成员数量 2.统计所有用户的提交总次数 3.统计所有用户指定时间段的提交次数 4.按用户名统计提交次数 完整脚本如下 一、前言 项目中有很多成员,如何查看各个时间段每个组员的代码提交量,下…...
2023/3/28 17:11:01 - Vue实现单页缓存,下一页刷新
vue单页缓存实现方案分析 实现前进刷新,返回不刷新的功能,并且返回时可以记住上一页的滚动位置,有两套方案可选 方案一:vue的keep-alive组件 具体使用如下: <keep-alive max"10"><router-view…...
2023/3/28 17:09:36 - Downie 4 4.6.12 MAC上最好的一款视频下载工具
Downie for Mac 简介 Downie是Mac下一个简单的下载管理器,可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 Downie 4 Downie 4 for Mac Downie 4 for Mac软件特点 支持许多站点 -当前支持1000多个不同的站点&…...
2023/3/28 17:03:43 - vscode搭建Django环境五:vscode配置react开发环境
1、安装node 请在官网下载安装:https://nodejs.org/zh-cn/vscode 中新建终端输入指令node -v,能显示版本号,说明 node 已经装好了输入指令npm -v,能显示版本号,说明 npm 可以使用了 nodejs安装参考:https…...
2023/3/28 17:03:28 - TiDB入门篇-数据物理备份和恢复
简介 快照备份是集群全量备份的一种实现。它基于 TiDB 的多版本并发控制 (MVCC) 实现,将指定快照包含的所有数据备份到目标存储中。备份下来的数据大小约等于集群(压缩后的)单副本数据大小。备份完成之后,你可以在一个空集群或不…...
2023/3/28 17:02:48 - 电脑录屏怎么录?超详细的录屏教程来了
案例:电脑录屏怎么录?求详细的电脑录屏教程! “最近的工作需要用到电脑录屏,但是我不知道电脑录屏怎么录?去网上搜索了一下教程都是比较大概的,我这个新手小白根本看不懂。在这里想问问大家,有…...
2023/3/28 17:02:09 - 从0使用TCP手撸http服务器一
背景介绍: 成熟的http服务器框架非常多,例如SB,flask,.net.....这些框架基本上都是运行在操作系统之上,非常的高级。但是我们做嵌入式的望尘莫及!当然如果是linux的设备,可能还能用上轻量级的http服务器框架࿰…...
2023/3/28 17:01:16 - Linux- 浅谈ELF目标文件格式
理解了进程的描述和创建之后,自然会想到我们编写的可执行程序是如何作为一个进程工作的?这就涉及可执行文件的格式、编译、链接和装载等相关知识。 这里先提一个常见的名词“目标文件”,是指编译器生成的文件。“目标”指目标平台,…...
2023/3/28 16:59:58 - 2022(二等奖)C859基于WebGIS的南京市排污口管理系统
作品介绍 一、需求分析 (一)社会需求 《国务院办公厅关于加强入河入海排污口监督管理工作的实施意见》明确提出,入河入海排污口(以下简称排污口)是指直接或通过管道、沟、渠等排污通道向环境水体排放污水的口门,是流…...
2023/3/28 16:58:54 - MobTech|场景唤醒的实现
什么是场景唤醒? 场景唤醒是moblink的一项核心功能,可以实现从打开的Web页面,一键唤醒App,并恢复对应的场景。 场景是指用户在App内的某个特定页面或状态,比如商品详情页、活动页、个人主页等。每个场景都有一个唯一…...
2023/3/28 16:57:55 - echarts 关系调用高亮示例 dispatchAction及其遇到的问题
如图所示 <template><div class"Chart"><div class"main_box"><div class"diagram_box" v-if"activeChart diagram"><div class"drawer"><drawer:drawer.sync"drawer":cusStyl…...
2023/3/28 16:56:33 - L1-018 大笨钟 L1-020 帅到没朋友 L1-034 点赞
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数ÿ…...
2023/3/28 16:55:06 - 两个数组的交集(力扣刷题)
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/intersection-of-two-arrays 说…...
2023/3/28 16:54:40 - 【HashMap】jdk1.8中HashMap的插入扩容源码学习分析
jdk1.8中HashMap的插入扩容源码学习分析 一、成员变量 首先介绍HashMap中各个成员变量的作用,在HashMap中有以下成员变量 size记录了HashMap中键值对的个数 loadFactor(加载因子)用来决定size达到容量的百分之多少时触发扩容机制 默认是0…...
2023/3/28 16:53:02 - uni-app css尺寸单位rpx介绍
一,前言 1.在使用uni-app开发小程序时支持的尺寸单位如下 (1)基础单位:px , rpx (2)h5单位:rem ,vm ,vh 2.rpx是微信小程序提出的一种响应式px 二&#x…...
2023/3/28 16:52:49 - 纳瓦尔的推荐读物
非虚构类 《无穷的开始:世界进步的本源》,戴维多伊奇这本书不是很好理解,但确实让我变得更聪明了。 《人类简史:从动物到上帝》,尤瓦尔赫拉利这本书介绍了人类的历史。书中的观察、框架和心智模型会让你以不同的方式看…...
2023/3/28 16:50:33 - 【JavaScript】43_DOM编程:DOM修改与demo
10、DOM的修改 appendChild() 用于给一个节点添加子节点 list.appendChild(li) insertAdjacentElement() 可以向元素的任意位置添加元素 两个参数: 1.要添加的位置 2.要添加的元素 beforeend 标签的最后 afterbegin 标签的开始 beforebegin 在元素的前边插…...
2023/3/28 16:50:09 - Ubuntu下解决 ×.so.×: wrong ELF class: ELFCLASS64 的问题
安装软件时出现问题 .so.:wrong ELF class: ELFCLASS64 ,大致的意思是软件是32位的,需要32位的 .so.动态链接库,而系统是64位的所提供的该 动态链接库.so.是64位的,所以不能用。 首先可以查看自己的64位系统是否开启了32位支持功…...
2023/3/28 16:48:11 - [学习笔记]PowerBI数据分析与可视化-B站数据大白
参考资料 B站视频-Power BI 数据分析与可视化 前言 原视频中可能的勘误在笔记中有修改。CtrlF搜索“勘误”两个字可以快速定位到勘误。 原视频中可能的差异在笔记中有提及。CtrlF搜索“差异”两个字可以快速定位到勘误。 2. 建模与DAX函数 2.01 建立关系模型 表可以分为维…...
2023/3/28 16:47:41 - 如何进行安全可靠的API身份验证?
前言: 在开发安全的 REST API 时,身份验证是必不可少的。你可以将你的应用程序想象成一个聚会,那么身份验证就像一扇门,决定哪些客人可以进入——或者更准确地说,哪些请求可以进出。 接下来我将介绍四种常用的身份验证…...
2023/3/28 16:46:37 - Python机器学习1
机器学习现在很火的,纯纯的行业红海,虽然我已经脱离计算机行业了,但是我觉得,机器学习还是有必要学一下的,说不定以后会用的上呢,所以,乘着现在研一时间还比较多,除了自己研究方向以…...
2023/3/28 16:46:05 - 局部变量被莫名的改变如何处理
问题背景: 一个函数内部的局部变量 初始化 X0,然后中间X 。再去访问时,X还是0; 伪代码 function A {int x0;int buff[4096];int tx[4096];....;;;; for() {x....if(x 1){.........}function B(buff)function C()......} } 原本…...
2023/3/28 16:45:51 - 基于springboot实现财务管理系统【源码+论文】分享
基于springboot实现财务管理系统演示开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包…...
2023/3/28 16:44:52 - KEYSIGHT DAQ970A/是德科技DAQ970A数据采集器
产品概览 KEYSIGHT / AGILENT DAQ970A 数据采集系统 Keysight DAQ970A 是下一代数据采集 (DAQ) 系统,具有 3 插槽主机和 8 个插件模块供您选择。DAQ970A 具有 6 位(22 位)分辨率、0.004% 基本 dcV 精度和超低读取噪声。内部自动量程 DMM 直…...
2023/3/28 16:44:04 - CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理
作者:林苍 背景 容器无疑已经成为新的云计算基础设施,企业私有云平台的建设重心,正在从虚拟化的计算、存储、网络的建设,转向构建以容器、微服务等为核心的云原生平台。不过值得注意的是,企业 IT 系统在进行容器化改造…...
2023/3/28 16:43:23 - linux 内存泄漏排查--多种工具介绍
目录 1.工具 2.valgrind 2.1.Valgrind 安装 2.2.valgrind 使用 2.3.valgrind常见的命令行选项如下: 2.4.日志分析 3.mtrace 3.1.使用 3.2.注意 3.3.结果分析 4.bcc工具里面的memleak-bpfcc 4.1.命令安装 4.2.源码安装 4.3.结果分析 4.4.辅助命令 5.Sani…...
2023/3/28 16:40:11 - Pytorch构建自己的数据集
1.Pytorch内置的Dataset Pytorch中内置了许多数据集,我们可以从torchvision库中进行导入。比如,我们可以导入Fashion-MNIST数据集 import torch from torch.utils.data import Dataset from torchvision import datasets from torchvision.transforms …...
2023/3/28 16:39:01 - 【3月比赛合集】20场可报名的「创新应用」和「程序设计」大奖赛,任君挑选!
CompHub 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号同时会推送最新的比赛消息,欢迎关注! 更多比赛信息见 CompHub主页 或 点击文末阅读原文 以下信息仅供参考,以比赛官网为准 目录 创新应用…...
2023/3/28 16:37:34 - 经典文献阅读之--LOCUS 2.0(LiDAR为中心的多传感器LSLAM)
0. 简介 在20年DARPA地下挑战赛中CoSTAR队伍提出了LOCUS这个深度学习模块,在两年后LOCUS2.0出世,LOCUS 2.0包括一种新的基于法线的广义迭代最近点(GICP)公式,该公式减少了点云对齐的计算时间,一种自适应体…...
2023/3/28 16:35:26 - NDK FFmpeg音视频播放器四
NDK前期基础知识终于学完了,现在开始进入项目实战学习,通过FFmpeg实现一个简单的音视频播放器。 音视频一二三节已经实现了音视频播放,本节主要是通过Profiler来检测工程存在的内存泄漏问题。 主要内容如下: 1.项目native层内存泄…...
2023/3/28 16:32:21
最新文章
- Git统计项目成员代码提交量
目录 一、前言 二、Git Bash 三、统计信息 1.统计某项目中成员数量 2.统计所有用户的提交总次数 3.统计所有用户指定时间段的提交次数 4.按用户名统计提交次数 完整脚本如下 一、前言 项目中有很多成员,如何查看各个时间段每个组员的代码提交量,下…...
2023/3/28 17:11:01 - Vue实现单页缓存,下一页刷新
vue单页缓存实现方案分析 实现前进刷新,返回不刷新的功能,并且返回时可以记住上一页的滚动位置,有两套方案可选 方案一:vue的keep-alive组件 具体使用如下: <keep-alive max"10"><router-view…...
2023/3/28 17:09:36 - Downie 4 4.6.12 MAC上最好的一款视频下载工具
Downie for Mac 简介 Downie是Mac下一个简单的下载管理器,可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 Downie 4 Downie 4 for Mac Downie 4 for Mac软件特点 支持许多站点 -当前支持1000多个不同的站点&…...
2023/3/28 17:03:43 - vscode搭建Django环境五:vscode配置react开发环境
1、安装node 请在官网下载安装:https://nodejs.org/zh-cn/vscode 中新建终端输入指令node -v,能显示版本号,说明 node 已经装好了输入指令npm -v,能显示版本号,说明 npm 可以使用了 nodejs安装参考:https…...
2023/3/28 17:03:28 - TiDB入门篇-数据物理备份和恢复
简介 快照备份是集群全量备份的一种实现。它基于 TiDB 的多版本并发控制 (MVCC) 实现,将指定快照包含的所有数据备份到目标存储中。备份下来的数据大小约等于集群(压缩后的)单副本数据大小。备份完成之后,你可以在一个空集群或不…...
2023/3/28 17:02:48 - 电脑录屏怎么录?超详细的录屏教程来了
案例:电脑录屏怎么录?求详细的电脑录屏教程! “最近的工作需要用到电脑录屏,但是我不知道电脑录屏怎么录?去网上搜索了一下教程都是比较大概的,我这个新手小白根本看不懂。在这里想问问大家,有…...
2023/3/28 17:02:09 - 从0使用TCP手撸http服务器一
背景介绍: 成熟的http服务器框架非常多,例如SB,flask,.net.....这些框架基本上都是运行在操作系统之上,非常的高级。但是我们做嵌入式的望尘莫及!当然如果是linux的设备,可能还能用上轻量级的http服务器框架࿰…...
2023/3/28 17:01:16 - Linux- 浅谈ELF目标文件格式
理解了进程的描述和创建之后,自然会想到我们编写的可执行程序是如何作为一个进程工作的?这就涉及可执行文件的格式、编译、链接和装载等相关知识。 这里先提一个常见的名词“目标文件”,是指编译器生成的文件。“目标”指目标平台,…...
2023/3/28 16:59:58 - 2022(二等奖)C859基于WebGIS的南京市排污口管理系统
作品介绍 一、需求分析 (一)社会需求 《国务院办公厅关于加强入河入海排污口监督管理工作的实施意见》明确提出,入河入海排污口(以下简称排污口)是指直接或通过管道、沟、渠等排污通道向环境水体排放污水的口门,是流…...
2023/3/28 16:58:54 - MobTech|场景唤醒的实现
什么是场景唤醒? 场景唤醒是moblink的一项核心功能,可以实现从打开的Web页面,一键唤醒App,并恢复对应的场景。 场景是指用户在App内的某个特定页面或状态,比如商品详情页、活动页、个人主页等。每个场景都有一个唯一…...
2023/3/28 16:57:55 - echarts 关系调用高亮示例 dispatchAction及其遇到的问题
如图所示 <template><div class"Chart"><div class"main_box"><div class"diagram_box" v-if"activeChart diagram"><div class"drawer"><drawer:drawer.sync"drawer":cusStyl…...
2023/3/28 16:56:33 - L1-018 大笨钟 L1-020 帅到没朋友 L1-034 点赞
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数ÿ…...
2023/3/28 16:55:06 - 两个数组的交集(力扣刷题)
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/intersection-of-two-arrays 说…...
2023/3/28 16:54:40 - 【HashMap】jdk1.8中HashMap的插入扩容源码学习分析
jdk1.8中HashMap的插入扩容源码学习分析 一、成员变量 首先介绍HashMap中各个成员变量的作用,在HashMap中有以下成员变量 size记录了HashMap中键值对的个数 loadFactor(加载因子)用来决定size达到容量的百分之多少时触发扩容机制 默认是0…...
2023/3/28 16:53:02 - uni-app css尺寸单位rpx介绍
一,前言 1.在使用uni-app开发小程序时支持的尺寸单位如下 (1)基础单位:px , rpx (2)h5单位:rem ,vm ,vh 2.rpx是微信小程序提出的一种响应式px 二&#x…...
2023/3/28 16:52:49 - 纳瓦尔的推荐读物
非虚构类 《无穷的开始:世界进步的本源》,戴维多伊奇这本书不是很好理解,但确实让我变得更聪明了。 《人类简史:从动物到上帝》,尤瓦尔赫拉利这本书介绍了人类的历史。书中的观察、框架和心智模型会让你以不同的方式看…...
2023/3/28 16:50:33 - 【JavaScript】43_DOM编程:DOM修改与demo
10、DOM的修改 appendChild() 用于给一个节点添加子节点 list.appendChild(li) insertAdjacentElement() 可以向元素的任意位置添加元素 两个参数: 1.要添加的位置 2.要添加的元素 beforeend 标签的最后 afterbegin 标签的开始 beforebegin 在元素的前边插…...
2023/3/28 16:50:09 - Ubuntu下解决 ×.so.×: wrong ELF class: ELFCLASS64 的问题
安装软件时出现问题 .so.:wrong ELF class: ELFCLASS64 ,大致的意思是软件是32位的,需要32位的 .so.动态链接库,而系统是64位的所提供的该 动态链接库.so.是64位的,所以不能用。 首先可以查看自己的64位系统是否开启了32位支持功…...
2023/3/28 16:48:11 - [学习笔记]PowerBI数据分析与可视化-B站数据大白
参考资料 B站视频-Power BI 数据分析与可视化 前言 原视频中可能的勘误在笔记中有修改。CtrlF搜索“勘误”两个字可以快速定位到勘误。 原视频中可能的差异在笔记中有提及。CtrlF搜索“差异”两个字可以快速定位到勘误。 2. 建模与DAX函数 2.01 建立关系模型 表可以分为维…...
2023/3/28 16:47:41 - 如何进行安全可靠的API身份验证?
前言: 在开发安全的 REST API 时,身份验证是必不可少的。你可以将你的应用程序想象成一个聚会,那么身份验证就像一扇门,决定哪些客人可以进入——或者更准确地说,哪些请求可以进出。 接下来我将介绍四种常用的身份验证…...
2023/3/28 16:46:37 - Python机器学习1
机器学习现在很火的,纯纯的行业红海,虽然我已经脱离计算机行业了,但是我觉得,机器学习还是有必要学一下的,说不定以后会用的上呢,所以,乘着现在研一时间还比较多,除了自己研究方向以…...
2023/3/28 16:46:05 - 局部变量被莫名的改变如何处理
问题背景: 一个函数内部的局部变量 初始化 X0,然后中间X 。再去访问时,X还是0; 伪代码 function A {int x0;int buff[4096];int tx[4096];....;;;; for() {x....if(x 1){.........}function B(buff)function C()......} } 原本…...
2023/3/28 16:45:51 - 基于springboot实现财务管理系统【源码+论文】分享
基于springboot实现财务管理系统演示开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包…...
2023/3/28 16:44:52 - KEYSIGHT DAQ970A/是德科技DAQ970A数据采集器
产品概览 KEYSIGHT / AGILENT DAQ970A 数据采集系统 Keysight DAQ970A 是下一代数据采集 (DAQ) 系统,具有 3 插槽主机和 8 个插件模块供您选择。DAQ970A 具有 6 位(22 位)分辨率、0.004% 基本 dcV 精度和超低读取噪声。内部自动量程 DMM 直…...
2023/3/28 16:44:04 - CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理
作者:林苍 背景 容器无疑已经成为新的云计算基础设施,企业私有云平台的建设重心,正在从虚拟化的计算、存储、网络的建设,转向构建以容器、微服务等为核心的云原生平台。不过值得注意的是,企业 IT 系统在进行容器化改造…...
2023/3/28 16:43:23 - linux 内存泄漏排查--多种工具介绍
目录 1.工具 2.valgrind 2.1.Valgrind 安装 2.2.valgrind 使用 2.3.valgrind常见的命令行选项如下: 2.4.日志分析 3.mtrace 3.1.使用 3.2.注意 3.3.结果分析 4.bcc工具里面的memleak-bpfcc 4.1.命令安装 4.2.源码安装 4.3.结果分析 4.4.辅助命令 5.Sani…...
2023/3/28 16:40:11 - Pytorch构建自己的数据集
1.Pytorch内置的Dataset Pytorch中内置了许多数据集,我们可以从torchvision库中进行导入。比如,我们可以导入Fashion-MNIST数据集 import torch from torch.utils.data import Dataset from torchvision import datasets from torchvision.transforms …...
2023/3/28 16:39:01 - 【3月比赛合集】20场可报名的「创新应用」和「程序设计」大奖赛,任君挑选!
CompHub 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号同时会推送最新的比赛消息,欢迎关注! 更多比赛信息见 CompHub主页 或 点击文末阅读原文 以下信息仅供参考,以比赛官网为准 目录 创新应用…...
2023/3/28 16:37:34 - 经典文献阅读之--LOCUS 2.0(LiDAR为中心的多传感器LSLAM)
0. 简介 在20年DARPA地下挑战赛中CoSTAR队伍提出了LOCUS这个深度学习模块,在两年后LOCUS2.0出世,LOCUS 2.0包括一种新的基于法线的广义迭代最近点(GICP)公式,该公式减少了点云对齐的计算时间,一种自适应体…...
2023/3/28 16:35:26 - NDK FFmpeg音视频播放器四
NDK前期基础知识终于学完了,现在开始进入项目实战学习,通过FFmpeg实现一个简单的音视频播放器。 音视频一二三节已经实现了音视频播放,本节主要是通过Profiler来检测工程存在的内存泄漏问题。 主要内容如下: 1.项目native层内存泄…...
2023/3/28 16:32:21