码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
java面试——集合(ArrayList、lterator、LinkedList)源码理解
文章目录
ArrayList扩容机制
lterator迭代器
ArrayList与LinkedList的区别
ArrayList扩容机制
初始化:(无参时)数组大小是0,添加第一个元素时是10。有参数时,数组大小就是参数。
扩容条件:超过容量大小的3/4。
以后扩容大小是上一次数组大小的1.5倍(原容量右移一位+原容量)。
addAll()扩容机制: 比较下次扩容的大小和添加元素的个数,取较大值。
lterator迭代器
fail-fast:一旦发现遍历时,其他线程来修改,即将抛异常(ArrayList)
如何判断——在迭代器初始化成员变量时会记录当前集合被修改的次数,在遍历中一直比较这两个值是否相等。如果在遍历的途中集合的修改次数参数改变,就会抛出异常
fail-safe:遍历时其他线程来修改,牺牲一致性,保持遍历(CopyOnWriteArrayList)
初始化时在迭代器成员中复制了当前集合
add()源码——写时复制,即在添加元素时,复制一个新数组(长度+1),在新数组的最后加入新元素。
ArrayList与LinkedList的区别
底层结构:
ArrayList是数组,需要连续的内存
LinkedList是双向链表,不需要连续内存
随机访问性能
ArrayList支持随机访问,实现了RandomAccess接口(里面没有方法,只是一个标识)
LinkedList不支持随机访问,因为是链式存储,需要遍历寻址。
插入、删除对比
ArrayList尾部插入、删除性能可以,其它部分插入、删除都会移动数据,因此性能会低(未扩容时)
LinkedList头尾插入删除性能高
内存
ArrayList:可以利用CPU缓存、局部性原理
LinkedList:占用内存多
相关阅读:
阿里巴巴Java工程师:怎么才算掌握了JDK中的线程池?
ssm和springboot整合
阈值与平滑处理
域名抢注“卷”到了表情包?ENS逆势上涨的新推力
centos7安装redis(包含各种报错)
【Nginx28】Nginx学习:代理模块(二)缓存与错误处理
力扣:72. 编辑距离
管理者的三抓三放
龙迅LT8912B 单通道MIPIDSI桥接LVDS+HDMI(1.4)同显点屏LVDS,加环出一路HDMI
【艾特淘】8月22日之后,抖音精选联盟准入标准变了
原文地址:https://blog.csdn.net/student_hwj/article/details/126859393
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | 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号