linked list和arraylist有什么区别

小编 2616

linked list和arraylist有以下区别:1.数据结构不同;2.数据处理效率不同;3.自由性不同;4.主要控件开销不同;5.适用的使用场景不同。数据结构不同是指,LinkedList内部使用基于链表的数据结构实现存储;而ArrayList是实现了基于动态数组的数据结构。

1.实现的数据结构不同

LinkedList内部使用基于链表的数据结构实现存储。它有一个内部类作为存放元素的单元,里面有三个属性,用来存放元素本身以及前后2个单元的引用,另外LinkedList内部还有一个header属性,用来标识起始位置,LinkedList的名列前茅个单元和最后一个单元都会指向header,因此形成了一个双向的链表结构。

ArrayList是基于动态数组的数据结构。因为是数组,所以ArrayList在初始化的时候,有初始大小10,插入新元素的时候,会判断是否需要扩容,扩容的步长是0.5倍原容量,扩容方式是利用数组的复制,因此有一定的开销。

2.数据处理效率不同

对于查找和替换(get\set),ArrayList要快于LinkList,因为基于数组,有索引,可以通过其索引值快速查找。

对于删除和增加(add\remove),LinkList要快于 ArrayList,在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的,因为其是双向链表,有前后指针,可以直接断开指针进行删除和增加。

3.自由性不同

LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用;而ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用。

4.主要控件开销不同

LinkList主要控件开销在于需要存储结点信息以及结点指针信息;ArrayList主要控件开销在于需要在lList列表预留一定空间。

5.适用的使用场景不同

如果应用程序有更多的插入或者删除操作,较少的数据读取,LinkedList对象要优于ArrayList对象;如果应用程序对数据有较多的随机访问,ArrayList对象要优于LinkedList对象。

延伸阅读

java中常见的几种数据结构

1.数组型数据结构

在java中数组的类型只要不是Object类型,那么它的数据类型必须一致,因为Object类型的数组可以存放任何值。在java中对数组操作的类也比较多,最常见的是ArrayList。

2.链表型数据结构

链表有单向的和双向的,还有环形的,java中双向的链表有LinkedList;环形的有LinkedHashMap。

3.队列型数据结构

队列就像他的名字一样,在优先级一样的情况下,他是一个先进先出的数据结构。但也有例外,在android中有这样两个类PriorityQueue和PriorityBlockingQueue,他们不是先进先出的,他会根据你的优先级给你排序,优先级高的排在前面,优先级低的排到后面。

4.栈型数据结构

栈和队列的区别就是栈是一种先进后出的数据结构,这个就好比你往桶里放东西,先放的肯定是在最下面,最后放的肯定是在最上面,拿的时候是从上面拿的,也就是最后放的。

5.散列表型数据结构

散列表是最常见的也就是HashMap,它是数组和链表的结合。

6.堆型数据结构

堆其实就是一个完全二叉树,它的特点就是除了最后一行,其他每行都是满的,并且最后一行如果不满,你们他们都是靠左的。常见的有大顶堆和小顶堆,具体可看下我微信公众“数据结构和算法”中推送的十几种排序算法中的堆排序。

7.树型数据结构

关于树的就比较多了,常见的有二叉树,还有我前面写的红黑树TreeMap红黑树源码详解,还有字典树,B-树,B+树,哈夫曼树等。

8.图型数据结构

图在面试中一般遇到的比较少,常见的一个是有向图(也就是有方向的),一个是无向图(也就是无方向的)。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部