java集合类之list

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了java集合类之list脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

list实现了collections接口, Collection接口继承了ITerator接口,继承Iterator接口的类可以使用迭代器遍历元素(即Collection接口的类都可以使用,list主要有3个实现类

ArrayList, LinkedList, Vector

先看下三者的主要联系和区别

1, ArrayList和Vector底层数据存储都是使用Object数组实现的, 基于数组存储的特点, 我们知道这两个兄弟都是查询速度快,增加/删除速度慢。 二者的主要区别在于:ArrayList线程不安全, 而Vector线程安全

(扩展知识--数组存储的特点? 数组存储地址是连续的,可以随机访问,所以在查询时, 根据索引就可以快速定位到数据的位置。 但执行增加/删除操作时, 为保证连续性, 操作结束后还需要对数组进行移位, 移位是非常昂贵的操作,试想, 对于一个长度为1000的数组, 如果我们现在要删除第3个元素, 删除之后还需要对后面的997个元素前移1位)

2, Vector虽然线程安全,但安全是有代价的,Vector中大部分方法都加了同步锁(synchronized), 所以整体访问速度要慢于ArrayList

3,&nbsp; ArrayList可以通过val list = Collections.synchronizedList(ArrayList<String>) 方法来实现线程安全

4, LinkedList底层使用双向链表存储, 所以它相对ArrayList/Vector来说, 查询速度较慢, 但增加/删除效率高

(扩展知识: 链表存储的特点? 链表存储地址是不连续的, 依靠指针来指示下一个元素的位置,所以它不能随机访问, 我们在执行查询操作时,需要遍历链表来找到相应元素的位置,所以相对数组存储,@R_519_1304@更高。 但是在插入/删除操作时, 只需要改变相邻元素的指针,所以效率高于数组)

(CPU缓存会把一片连续的内存空间读入,因为数组结构是连续的内存地址,所以数组全部或者部分元素被连续存在CPU缓存里面,平均读取每个元素的时间只要3个CPU时钟周期。   而链表的节点是分散在堆空间里面的,这时候CPU缓存帮不上忙,只能是去读取内存,平均读取时间需要100个CPU时钟周期。这样算下来,数组访问的速度比链表快33倍! (这里只是介绍概念,具体的数字因CPU而异)。)

  • ArrayList详解

 

脚本宝典总结

以上是脚本宝典为你收集整理的java集合类之list全部内容,希望文章能够帮你解决java集合类之list所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。