首页 > 编程语言 >【java面试题】ArrayList和LinkedList的区别

【java面试题】ArrayList和LinkedList的区别

时间:2022-08-15 10:39:09浏览次数:74  
标签:面试题 java LinkedList ArrayList 元素 插入 数组 数据

【java面试题】ArrayList和LinkedList的区别

 

ArrayList和LinkedList都实现了List接口,它们有一下的不同点:

ArrayList是基于索引的数据接口,它的底层是数组,它可以以O(1)时间复杂度对元素进行随机访问。

LinkedList是以元素列表形式存储它的数据,每一个元素都和它前一个和后一个元素链接在一起,这种情况下,查找某个元素的时间复杂度是O(n)

相对于ArrayList,LinkedList的插入、添加、删除操作速度更快,因为当元素被添加到集合任意位置时,不需要像数组那样重新计算大小或者更新索引。

LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素

 

为什么ArrayList查找快,LinkedList增删快?

  1. 因为Array 是基于索引(index) 的数据结构,它使用索引在数组中搜索和读取数据是很快的,Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重新排数组中的数据

  2. 相对于ArrayList,LinkedList插入是更快的,因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度为O(n),而LinkedList中插入或删除的时间复杂度仅为O(1),ArrayList在插入数据时还需要更新索引(如来插入数组的尾部)

  3. 类似于插入数据,删除数据时,LinkedList也优于ArrayList

  4. LinkedList需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkList中的每个节点中存储的是实际的数据和前后节点的位置(一个LinkedList实例存储了两个值:Node<E> first 和 Node<E> last,它们分别表示链表的头节点和尾节点,而每个Node实例存储了三个值 E item,Node next,Node pre)

 

什么场景下更适宜使用LinkedList,而不用ArrayList

  1. 你的应用不会随机访问数据,因为如果你需要LinkedList中的第n个元素时,你需要从第一个数据顺序数到第n个数据,然后读取数据

  2. 你的应用更多的插入和删除数据,更少的读取数据,因为插入和删除不涉及重排数据,所以要比ArrayList更快。

标签:面试题,java,LinkedList,ArrayList,元素,插入,数组,数据
From: https://www.cnblogs.com/wztblogs/p/16587339.html

相关文章

  • JavaScript 异步函数的 Promisification 处理
    Promisification是一个很长的词,表示一个编程范式的转变,即将接受回调的函数转换为一个返回类型为Promise的函数。我们现实的开发项目中经常需要这种转换,因为许多函数和......
  • Java 9.回文数
    给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。   例如,121是回文,而123不是。来源:力扣......
  • 一文讲透Java核心技术之高可扩展利器SPI
    大家好,我是冰河~~SPI的概念JAVASPI=基于接口的编程+策略模式+配置文件的动态加载机制SPI的使用场景Java是一种面向对象语言,虽然Java8开始支持函数式编程和Stream,但是......
  • JAVA 发布订阅模式
    JAVA发布订阅模式一、发布订阅模式在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为......
  • 【java面试题】面向对象的特征
    【java面试题】面向对象的特征 面向对象编程是利用类和对象编程的一种思想,万物可归类,类是对于世界事物的高度抽象,万物皆对象,对象是具体的世界事物。面向对象的三大特征......
  • 长篇图解java反射机制及其应用场景
    一、什么是java反射?在java的面向对象编程过程中,通常我们需要先知道一个Class类,然后new类名()方式来获取该类的对象。也就是说我们需要在写代码的时候(编译期或者编译期之......
  • Java开发学习(二十五)----使用PostMan完成不同类型参数传递
    一、请求参数请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数?关于请求参数的......
  • 【Java】List排序方法(包括对象、Map等内部排序实现)
    前言日常开发中经常会对List集合做排序操作,JDK为我们提供了强大的排序方法,可以针对对象、Map、基本类型等进行正/倒排序操作。参考博客:JAVA列表排序方法sort和reversed......
  • javaweb Filter详解
    Filter详解1.快速入门packagecom.cj.filter;importjavax.servlet.*;importjavax.servlet.annotation.WebFilter;importjavax.servlet.annotation.WebServlet;i......
  • Day2(复习java基础知识)
    Java基础java是一门强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 Java的特性简单性面向对象可移植性高性能分布式动态......