栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面试篇-ArrayList和LinkedList的区别?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试篇-ArrayList和LinkedList的区别?

面试篇-ArrayList和LinkedList的区别?
  • ArrayList和LinkedList的区别?
    • 背景
      • 数组特点
      • 链表特点
    • ArrayList
      • 查询
      • 插入和删除
    • LinkedList
      • 查询
      • 插入和删除

ArrayList和LinkedList的区别? 背景 数组特点

数组(Array)是一种线性表数据结构。它存储方式在内存的地址是连续的,大小固定,一旦分配不能被其他引用占用。它的特点是查询快,时间复杂度是O(1),插入和删除的操作比较慢,时间复杂度是O(n)。

链表特点

链表的存储方式是非连续的、非顺序的,大小不固定,特点与数组相反,插入和删除快,查询速度慢。

ArrayList

ArrayList的底层是基于数组实现。

查询

直接通过下标获取查询数据的地址,读取数据即可,速度快。

ArrayList objects = new ArrayList<>();
// 查询
objects.get(1);
 
插入和删除 

未指定下标:
获取当前数组的最后一个数组元素下标位置,进行插入操作,此时数组长度不够的话,会涉及一个扩容的操作,会影响插入速度。
指定下标:
找到当前需要插入的位置,将数据插入,将当前存在的数据整体向后移动,相比较而言,插入速度较慢。

 ArrayList objects = new ArrayList<>();
 // 插入
 objects.add("");
 // 指定位置插入
 objects.add(1,"");
 // 删除
 objects.remove("");
 objects.remove(1);
 

删除和插入类似!

LinkedList

LinkedList的底层是基于链表实现。

查询

通过遍历全部数据获取我们读取的下标数据即可,速度慢。但是LinkedList使用了Deque,所以使用getFirst()、getLast()方法读取数据时,速度快!

LinkedList objects1 = new LinkedList<>();
// 查询
objects1.get(1);
objects1.getFirst();
objects1.getLast();
 
插入和删除 

未指定下标:
获取当前链表的最后一个数组元素下标位置,进行插入操作,此时链表没有扩容一说,不会影响插入速度。
指定下标:
遍历链表的数据,找到指定下标,若下标较小,找的速度就快,反而下标较大,找的速度就慢,插入的速度都是一致的,就是找到指定下标位置的快慢而已!

 LinkedList objects1 = new LinkedList<>();
 // 插入
 objects1.add("");
  // 指定位置插入
 objects1.add(1,"");
 // 删除
 objects1.remove(1);
 objects1.remove("");
 // 删除(队列方法)
 objects1.removeFirst();
 objects1.removeLast(); 
 

删除和插入类似!

以上就是ArrayList和LinkedList的区别!
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号