0
点赞
收藏
分享

微信扫一扫

ArrayList 和 LinkedList 的区别有哪些?ArrayList 有什么特点?ArrayList比数组好在哪?

一、ArrayList 和 LinkedList 的区别有哪些

1.1 ArrayList

优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里面是连续存放的)。

缺点:因为地址是连续的,ArrayList要移动数据,所以插入和删除操作效率比较低。

1.2 LinkedList

优点:LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址。对于新增和删除操作比较占优势

缺点:因为LinkedList要移动指针,所以查询操作性能较低。

1.3 使用场景分析

当需要对数据进行随机访问的时候选择ArrayList

当需要对数据进行多次增加或者删除修改的时候选择LinkedList

如果容量固定,并且只会添加尾部,不会引起扩容,优先采用ArrayList

二、ArrayList的特点

ArrayList是Java集合框架中的一种存放相同类型元素数据的变长类集合,基于定长数组实现,当加入数据达到一定程度后会实行自动扩容。

底层是数组,在添加元素时:

如果add(o),添加到的是数组的尾部,如果要增加的数据量很大,应该使用ensureCapacity()方法,该方法的作用是预先设置ArrayList大小,这样可以大大提高初始化速度。

如果add(int,0)添加到某个位置,可能会挪动大量数组元素,并且可能会触发扩容机制。

高并发情况下,线程不安全。多个线程同时操作ArrayList会引发不可预知的异常或错误。

ArrayList实现了Cloneable接口,标识着它可以被复制,里面的clone()复制其实是浅复制。

三、ArrayList比数组好在哪

在不明确要插入多少数据的情况下,不知道需要初始化数组大小为多少,而ArrayList可以使用默认大小,当元素个数达到一定程度的时候会自动扩容。

举报

相关推荐

0 条评论