博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArrayList 和 LinkedList的底层数据结构
阅读量:7223 次
发布时间:2019-06-29

本文共 586 字,大约阅读时间需要 1 分钟。

hot3.png

LinkedList的实现较为简单: 底层使用双向链表实现、保留了头尾两个指针 、LinkedList的其他操作基本都是基于上面那六个函数实现的,另外LinkedList也有 failFast 机制,这个机制主要在迭代器中使用。

数组和链表各自的特性

数组和链表的特性差异,本质是:连续空间存储和非连续空间存储的差异。主要有下面两点:     

  1. ArrayList:底层是Object数组实现的:由于数组的地址是连续的,数组支持O(1)随机访问;数组在初始化时需要指定容量;数组不支持动态扩容,像ArrayList、Vector和Stack使用的时候看似不用考虑容量问题(因为可以一直往里面存放数据);但是它们的底层实际做了扩容;数组扩容代价比较大,需要开辟一个新数组将数据拷贝进去,数组扩容效率低;适合读数据较多的场合。
  2. LinkedList:底层使用一个Node数据结构,有前后两个指针,双向链表实现的。相对数组,链表插入效率较高,只需要更改前后两个指针即可;另外链表不存在扩容问题,因为链表不要求存储空间连续,每次插入数据都只是改变last指针;另外,链表所需要的内存比数组要多,因为他要维护前后两个指针;它适合删除,插入较多的场景LinkedList还实现了Deque接口。

转载于:https://my.oschina.net/u/1037605/blog/2980515

你可能感兴趣的文章
Gradle 多渠道打包的使用和错误分析(转)
查看>>
64位调试器花费的时间比预期的要长(A 64-bit debugging operation is taking longer than expected)...
查看>>
压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate
查看>>
ECShop模板原理
查看>>
STL学习系列六:List容器
查看>>
LFS 中文版手册发布:如何打造自己的 Linux 发行版
查看>>
spring 第一篇(1-1):让java开发变得更简单(下)转
查看>>
Java定位CPU使用高问题--转载
查看>>
ADO.NET与Oracle(一):获取多行记录集
查看>>
C/C++程序员必须熟练应用的开源项目
查看>>
python 时间及日期函数
查看>>
SMTP 简单邮件传输协议
查看>>
Python实现二叉树的存储和遍历
查看>>
国外人工智能界牛人主页
查看>>
Android 自定义View合集
查看>>
用scikit-learn学习谱聚类
查看>>
zookeeper原理解析-选举
查看>>
OpenStack 计算服务 Nova计算节点部署(八)
查看>>
8 -- 深入使用Spring -- 3...2 ResouceLoader 接口和 ResourceLoaderAware 接口
查看>>
win32下编译glog
查看>>