在程序开发中,少不了用到集合的时候;如果目标是一个优秀的程序员,就不能使用一个ArrayList走遍天下,应该在不同的场景下使用不同的集合。本文章主要介绍List集合中的子类ArrayList和LinkedList的区别,以及它们该如何选用。
先让我们看一下Collection中常用的集合,它有两个常用的子类,一个是List,另一个是Set。
List中常用的就是ArrayList(最常用) LinkedList(次之)。
和Set集合相比,List集合拥有特有的方法,以及元素存储有序。相比于Set会有更多的应用场景,那么在它两个常用的子类中选哪一个呢;
先介绍一下ArrayList
它的底层是由数组来实现的,数组的长度初始是0;当它存入第一个元素时,会将长度变为默认长度10;
每当数组储存满后,会将数组长度扩容到之前长度的1.5倍,且存储的元素索引不改变。
数组的特点在查询时会非常的有优势,可以直接通过索引来查询到当前索引位置的索引,但是当需要在指定索引增删元素时就很麻烦了。
如图;
每次增加元素都需要创建一个新的数组,会特别麻烦。
删除元素也同理,需要创建新的数组,将没有删除的元素从原数组中拿出,然后然后依次放入新的数组,这样就完成了新增删。所以ArrayList在查询方面很有优势,但是增删上就显得有些麻烦。
然后就是LinkedList
LinkedList的底层是链表实现的,先看一下链表的特点,由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。我们常说的链表结构有单向链表与双向链表,LinkedList是一个双向链表。
链表不能直接通过索引来找到元素,而是通过从头开始一个一个去找元素,会显得特别慢。
但是链表的优势在增删方面。
只需要下一个元素的地址值,就能完成增删。
总结
ArrayList的特点:增删慢,查询快。
LinkedList的特点:增删快,查询慢。
我们可以根据不同的场景来分别选择不同的集合来存储数据。