四种List对比总结

1、ArrayList

非线程安全

基于对象数组

get(int index)不需要遍历数组,速度快;

iterator()方法中调用了get(int index),所以速度也快

set(int index, E e)不需要遍历数组,速度快

add方法需要考虑扩容与数组复制问题,速度慢

remove(Object o)需要遍历数组,并复制数组元素,速度慢

remove(int index)不需要遍历数组,需要复制数组元素,但不常用

contain(E)需要遍历数组

2、LinkedList

非线程安全

基于环形双向链表

get(int index)需要遍历链表,速度慢;

iterator()方法中调用了get(int index),所以速度也慢

set(int index, E e)方法中调用了get(int index),所以速度也慢

add方法不需要考虑扩容与数组复制问题,只需创建新对象,再将新对象的前后节点的指针指向重新分配一下就好,速度快

remove(Object o)需要遍历链表,但不需要复制元素,只需将所要删除的对象的前后节点的指针指向重新分配一下以及将所要删除的对象的三个属性置空即可,速度快

remove(int index)需要遍历链表,但不需要复制元素,只需将所要删除的对象的前后节点的指针指向重新分配一下以及将所要删除的对象的三个属性置空即可,但不常用

contain(E)需要遍历链表

3、Vector(线程安全的ArrayList)

线程安全

扩容机制与ArrayList不同

4、Stack(继承于Vector)

线程安全

效率低下,可采用双端队列Deque或LinkedList来实现,Deque用的较多

总结:

在查询(get)、遍历(iterator)、修改(set)使用的比较多的情况下,用ArrayList

在增加(add)、删除(remove)使用比较多的情况下,用LinkedList

在需要线程安全而且对效率要求比较低的情况下,使用Vector,当然,实现ArrayList线程安全的方法也有很多,以后再说

在需要使用栈结构的情况下,使用Deque,Stack废弃就行了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 9,712评论 0 16
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,386评论 0 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,930评论 18 399
  • 我刚从深渊中返回 深渊的黑暗、深邃 否定、肯定 撕扯、纠结 惶恐、愉悦 所幸,在即将沉沦那一刻 我被一只手 拉回到...
    黑面小生阅读 2,224评论 0 0
  • 前言 这篇博客的用意是提醒我,入门了 Spring Boot 就该写篇博客沉淀一下知识了!同时,在接触 Sprin...
    活这么大就没饱过阅读 1,280评论 0 0