ArrayList 与LinkedList 的区别及分别的优缺点
2024-09-05 04:12:26
ArrayList,与LinkedList都是属于实现了List接口的类。首先从名字前缀开始看 ,Array表示数组,Link表示链表。
所以ArrayList底层是基于动态数组的。而LinkedList底层是基于双向链表的。
ArrayList必须是连续内存的,而LinkedList不要求连续内存。
ArrayList查询快,增加和删除慢;LinkedList增加和删除快,查询慢。
ArrayList 底层为动态数组,所以查询时是直接通过访问下标,查询效率高。而增加而删除时,为了保证内存的连续,增加和删除某一位置后,后方元素都得向前移动一位,
最坏情况就是删除第一个元素,则后面第2个到第n个元素都得往前移动一位。所以增加删除慢。
LinkedList底层为双向链表,不必保证内存上的连续,所以增删快,而查询时必须要经历从头到尾的遍历,所以查询慢。
为什么说ArrayList是基于动态数组呢?一般的数组,容量确定了就不可以再更改,也无法超过。但是ArrarList可以,
例如当数组元素数已满时调用了add方法向尾部添加一个元素,则此时会进行扩容,ArrayList会自动创建一个更大的数组,并将所有元素拷贝到新数组中,而原数组会被抛弃,
会被GC回收。扩容后新数组的容量为原来的1.5倍。
最新文章
- mysql表单输入数据出现中文乱码解决方法
- 第三章 --- 关于Javascript 设计模式 之 代理模式
- webView文本长按显示英文
- 软件工程(QLGY2015)第一次作业小结(含成绩)
- netfilter
- laravel url管理与使用
- acm-DP整理
- [POJ 2019] Cornfields
- Xcode - 详解真机测试步骤
- Java面试题集(1-50)
- Nginx均衡负载(IP_HASH)未生效
- “一切都是消息”--MSF(消息服务框架)入门简介
- Ubuntu 16.04 为 root 帐号开启 SSH 登录
- Java 构造器 考虑用静态构造方法代替构造器
- Effective Java 第三版——69. 仅在发生异常的条件下使用异常
- 02-HTML5新的input属性
- Linux修复系统命令
- Objective-C KVC讲解,包你看懂会用
- 2016.6.17——Valid Parentheses
- 稀疏数据压缩查询方法:Rank &; Select 操作