面试刷题8:Vector ArrayList LinkedList区别?

狂风中的少年 提交于 2020-03-25 14:57:57

3 月,跳不动了?>>>

<br />image.png<br /> <br /> <br />高效的管理和操作数据(数据结构)是非常重要的,java提供了对应的集合框架。<br /> <br /> <br />我是李福春,我在准备面试,今天的问题是:<br /> <br />Vector,ArrayList,LinkedList有什么区别?<br /> <br />这3个货都是List的直接子类或者间接子类,实现的是顺序集合,都提供了add,delete,index,遍历等操作。<br /> <br />区别是:<br /> <br />Vector是线程安全的,性能略差,自动扩容按照1倍扩容,适合按照顺序检索的场景;<br />ArrayLIst是非线程安全的,性能高,扩容基数0.5, 适合按照顺序检索的场景;<br />LinkedList是双向链表,是非线程安全的,性能高,不存在扩容,适合增加,删除的场景<br /> <br /> <br /> <br /> <br />

Java的集合体系

<br />image.png<br /> <br /> <br />Map没有继承Collection,不归纳如集合体系;<br /> <br />一些集合的实现是依赖于map来实现的;<br /> <br />比如TreeSet, 底层是 TreeMap , 只使用了key;  它是有序的,查询时间复杂度是常数级别,增加,删除,包含操作时间复杂度是log(n)<br /> <br />HashSet底层实现是HashMap , 它是无顺序的,增删包含操作是常数级别的时间复杂度,但是不宜设置过大的容量;<br /> <br />以上的集合除了Vector都是线程非安全的。<br /> <br /> <br /> <br /> <br /> <br />

集合的算法

<br /> <br />主要说默认的排序算法,Arrays.sort(T[])<br />当传入原始类型,使用的是双轴快速排序;<br />当传入对象类型,使用的是归并和二分插入综合的排序;<br /> <br /> <br />java8提供了stream,集合也支持并行排序。可以充分发挥多核心的计算能力。<br /> <br /> <br />

Java8对集合的改进

<br /> <br />基于接口的defalut方法,扩展了现有集合,可以轻松的Stream化;<br /> <br /> <br />

小结

<br /> <br />本篇先说明了ArrayList,LinkedList,Vector的相同点,再从线程安全,底层结构,扩容,性能,适用场景做了区别对比。<br /> <br />在扩展回顾了java的Collection体系包含的容器,特别之处了TreeSet,HashSet的底层实现马甲。<br /> <br />在简单说了一下集合的默认排序算法和并行排序算法,以及集合在java8中的Stream化。<br /> <br /> <br /> <br />

image.png

原创不易,转载请注明出处。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!