洋仔聊编程
List以及其实现类(ArrayList、LinkList、Vector)简介
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
洋仔聊编程
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
社区首页
>
专栏
>
List以及其实现类(ArrayList、LinkList、Vector)简介
List以及其实现类(ArrayList、LinkList、Vector)简介
洋仔聊编程
关注
发布于 2019-01-15 16:43:19
833
0
发布于 2019-01-15 16:43:19
举报
文章被收录于专栏:
Java开发必知必会
List
本身是一个接口,实现了Collection接口,而Collection接口又继承了Iterable类,所以他的数据结构是有序可以重复的结合,并且可以迭代
包涵一些基础的方法,不一一列举
三个实现类(ArrayList、LinkList、Vector)
ArrayList
1.概述:ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。
2.相关方法
构造方法: ArrayList提供了三种方式的构造器
1.构造一个默认初始容量为10的空列表
2:构造一个指定初始容量的空列表
3:构造一个包含指定collection的元素的列表,这些元素按照该collection的迭代器返回它们的顺序排列的。
存储方法
还有一些相关的读取与删除\扩容等方法,不再一一列举
3.底层数据结构:维护的是一个Object数组
4.线程不安全
5.查询速度快,增加删除慢
6.当容量超过10后(因为默认的初始容量为10),会创建一个新的数组(新数组的容量是原数组的150%),并将原本的数组复制到该数组中,完成扩容..( 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。 )
在源码中,计算原本容量的一半,是通过右移实现的
在grow()方法中进行扩容
源代码如下
LinkList
1.底层维护的是一个链表,并且是一个双向链表,所以顺序访问会非常高效,随机访问效率低。
2.使用Node类型的结点表示链表的相关信息(以前是使用的Entry),Node为LinkList的一个内部类
3.因为是链表不存在LinkedList容量不足的问题,除非内存不足。
4.增删速度快,查询速度慢
Vector
1.底层维护的是一个Object数组结构
2.线程安全,会发生并发问题的方法都用了synchronize修饰
3.没有ArrayList的效率高,因为同步会进行上下文切换,这也会导致cpu资源的消耗
4.当容量超过10后(因为默认的初始容量为10),会创建一个新的数组(新数组的容量是原数组的200%),并将原本的数组复制到该数组中,完成扩容..所以Vector比ArrayList更消耗内存.
在源码中是通过相加两个当前容量来定义新数组的容量的
在grow()方法中进行扩容
源代码
ArrayList与Vector
1.Vector是线程同步的,所以它也是线程安全的。而ArratList是线程异步的,不安全.所以ArrayList效率比较高。如果不考虑安全因素,一般用Arralist,,如果在多线程环境下最好使用Vector。
2.Vector在容量不足时,以原数组100%的容量扩容,而ArrayList是按照原数组的50%容量扩容,所以在数据量比较大的时候使用Vector比较好,可以建设扩容 次数。
本文参与
腾讯云自媒体同步曝光计划
,分享自作者个人站点/博客。
原始发表:2018年03月13日,如有侵权请联系
cloudcommunity@tencent.com
删除
前往查看
node.js
本文分享自
作者个人站点/博客
前往查看
如有侵权,请联系
cloudcommunity@tencent.com
删除。
本文参与
腾讯云自媒体同步曝光计划
,欢迎热爱写作的你一起参与!
node.js
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
LV.
文章
0
获赞
0
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐