arraylist,数组,linkedlist的底层区别

数组
数组是相同类型数据的有序的集合,有四个基本特点

长度固定,一旦创建,长度就不会发生改变
元素是相同数据类型的
元素可以是基本类型也可以是引用类型
数组内的元素可以通过下标快速的实现查询和修改,但插入数据和删除数据相对就会比较慢

ArrayList
ArrayList底层数据结构还是数组,通过下标索引可以快速的实现查询和修改,插入和删除相对较慢
ArrayList可以实现动态扩容,不像数组那样无法改变长度

LinkedList 是一个继承于AbstractSequentialList的双向链表。
LinkedList 可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,所以能对它进行队列操作。
LinkedList 实现 Deque 接口,能将LinkedList当作双端队列使用。
LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
LinkedList 实现java.io.Serializable接口,所以LinkedList支持序列化,能通过序列化去传输。
LinkedList 是非同步的。

总结
根据以上的信息,在实际选用时应该根据需求,如果查询修改比较多应该选用ArrayList,如果增加和删除操作比较多应该选择Link

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ArrayListLinkedList都是Java中的集合类,用于存储一组对象。它们的底层实现不同。 ArrayList底层是一个数组,当数组容量不足时,会自动扩容。因此,ArrayList适用于随机访问元素,但不适用于频繁插入或删除元素。 LinkedList底层是一个双向链表,每个节点都包含前驱节点和后继节点的引用。因此,LinkedList适用于频繁插入或删除元素,但不适用于随机访问元素。 总的来说,如果需要频繁插入或删除元素,建议使用LinkedList;如果需要随机访问元素,建议使用ArrayList。 ### 回答2: ArrayListLinkedList都是Java的集合框架中的常见的两种容器,用于存储一组对象。二者底层实现不同,在功能与表现上各有不同,下面详细介绍各自的底层实现原理。 ArrayList是一个基于动态数组实现的容器类,底层基于数组实现,存放元素的位置是连续的,它实现了List接口,并且允许有重复元素。 在ArrayList底层实现中,它通过一个Object类型的数组来存储元素,当数组不能满足元素的需求时,ArrayList会扩容,即先利用Arrays.copyOf()将旧数组复制到一个新的更大的数组中,再将新元素插入到数组末尾。 LinkedList则是通过双向链表实现的容器,通过节点来存储元素,它实现了List接口、Deque接口以及Queue接口,并且同样允许有重复元素。 在LinkedList底层实现中,它不像ArrayList那样需要实现扩容,因为它并没有与元素数量相关的容量限制。由于它是双向链表实现,所以在插入、删除操作时速度比较快。此外,LinkedList还实现了Queue接口和Deque接口的操作,也就是说可以支持先进先出FIFO队列和两端操作的double-ended queue,比如addFirst、addLast、removeFirst、removeLast等操作。 虽然ArrayListLinkedList底层实现机制不同,但它们在使用中的表现却有很大的相似之处,比如都可以进行元素的添加、删除、获取等基本操作,都可以实现迭代、基于元素的操作和传递函数式接口等高级特性。根据具体需求,需要选择合适的容器才能发挥其优势和性能。 ### 回答3: ArrayListLinkedList是Java中常用的两种数据结构,它们分别采用了不同的底层实现方式。 1. ArrayList ArrayList底层实现是基于数组的,它在内存中维护了一个Object[]数组,用来存储数据。在进行增删改查等操作时,都会涉及到数据的移动和重新分配内存空间。 当ArrayList的大小小于等于数组长度时,操作的时间复杂度为O(1);当大小大于数组长度时,时间复杂度为O(n)。因此,在大量操作时,效率相对较低,但在查询操作时效率比较高。 ArrayList的优点是:随机访问元素时效率较高,内存连续、访问速度快。 2. LinkedList LinkedList底层实现是基于链表的,每个元素存储了指向前一个元素和后一个元素的指针。LinkedList没有像ArrayList那样预分配内存空间,而是在添加元素时动态分配空间。 在进行增加或删除元素操作时,由于只需要改变相邻元素的引用关系,而不需要像ArrayList那样进行大规模数据的移动和重新分配内存空间,因此时间复杂度为O(1)。但是,在查询操作时,需要遍历整个链表,时间复杂度为O(n),效率相对较低。 LinkedList的优点是:插入和删除元素时效率较高,内存不连续,占用内存少,在频繁插入和删除元素的情况下效率更高。 综上所述,选择ArrayList还是LinkedList应根据具体情况而定。若需要频繁对元素进行查询和遍历操作,可选择ArrayList;若需要频繁添加或删除元素,可选择LinkedList
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值