码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
【Java】各List集合的特点和区别
各List
集合
的特点和区别
List集合类的元素有序(即添加顺序和去除顺序一致)、且可重复
List集合中的每个元素都有其对应的顺序索引、既支持索引
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
一、ArrayList的特点
ArrayList底层使用数组实现的
ArrayList线程不安全
可以存入null
有序、可重复
底层操作机制
ArrayList中维护了一个Object类型的数组elementData
当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第1次添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍
如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容elementData为1.5倍
二、Vector的特点
Vector底层使用数组实现
Vector线程安全
可以存入null
有序、可重复
在开发中,需要线程同步安全时,考虑使用Vector
扩容机制是原来的2倍
ArrayList和Vector的区别
底层结构
版本
线程安全(同步)效率
扩容倍数
ArrayList
可变数组
jdk1.2
不安全,效率高
如果有参构造1.5倍
如果是无参
1.第一次10
2.从第二次开始按照1.5倍扩
Vector
可变数组Object[]
jdk1.0
安全,效率不高
如果是无参,默认10,满后,就按照2倍扩容
如果指定大小,则每次直接按2被扩容
三、LinkedList的特点
LinkedList底层实现了双向链表和双端队列特点
可以添加任意元素(元素可以重复),包括null
线程不安全,没有实现同步
底层操作机制
LinkedList底层维护了一个双向链表
LinkedList中维护了两个属性first和last分别指向首节点和尾节点
每个节点(Node对象),里面又维护了prev、next、item三个属性,其中通过prev指向前一个,通过next指向后一个节点。最终实现双向链表
所以LinkedList的元素的添加和删除,不是通过数组完成的,相对来说效率较高
四、ArrayList和LinkedList比较
底层结构
增删的效率
改查的效率
ArrayList
可变数组
较低
数组扩容
较高
LinkedList
双向链表
较高、通过链表追加
较低
如何选择ArrayList和LinkedList
如果我们改查的操作多,选择ArrayList
如果我们增删的操作多,选择LinkedList
一般来说,在程序中,80%-90%都是查询,因此大多数情况下会选择ArrayList
在一个项目中,根据业务灵活选择,也可以这样,一个模块使用的是ArrayList,另外一个模块是LinkedList,也就是说,要根据业务来进行选择
相关阅读:
Weakmap详解
Python编程中的异常处理
羽夏看Linux内核——中断与分页相关入门知识
StopWatch使用注意S
五款朴实无华却又能极大提升办公效率的软件
html2canvas与window.devicePixelRatio
在JVM 中进程与线程关系、介绍线程:程序计数器、本地方法栈、虚拟机栈
Java中替换List中值的方法
GA4如何搭建转化目标?
【Linux-Linux发展史和环境安装】开源的力量!
原文地址:https://blog.csdn.net/qq_39757593/article/details/126899960
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | Kerberos协议及其部分攻击手法
0day的产生 | 不懂代码的"代码审计"
安装scrcpy-client模块av模块异常,环境问题解决方案
leetcode hot100【LeetCode 279. 完全平方数】java实现
OpenWrt下安装Mosquitto
AnatoMask论文汇总
【AI日记】24.11.01 LangChain、openai api和github copilot
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
正则表达式工具
cron表达式工具
密码生成工具
京公网安备 11010502049817号