List中两个子类ArrayList和LinkedList的区别

	在程序开发中,少不了用到集合的时候;如果目标是一个优秀的程序员,就不能使用一个ArrayList走遍天下,应该在不同的场景下使用不同的集合。本文章主要介绍List集合中的子类ArrayList和LinkedList的区别,以及它们该如何选用。
	先让我们看一下Collection中常用的集合,它有两个常用的子类,一个是List,另一个是Set。
	List中常用的就是ArrayList(最常用) LinkedList(次之)。

Collection集合中常用的集合
和Set集合相比,List集合拥有特有的方法,以及元素存储有序。相比于Set会有更多的应用场景,那么在它两个常用的子类中选哪一个呢;
先介绍一下ArrayList
它的底层是由数组来实现的,数组的长度初始是0;当它存入第一个元素时,会将长度变为默认长度10;
每当数组储存满后,会将数组长度扩容到之前长度的1.5倍,且存储的元素索引不改变。
数组的特点在查询时会非常的有优势,可以直接通过索引来查询到当前索引位置的索引,但是当需要在指定索引增删元素时就很麻烦了。
如图;数组增加元素
每次增加元素都需要创建一个新的数组,会特别麻烦。
删除元素也同理,需要创建新的数组,将没有删除的元素从原数组中拿出,然后然后依次放入新的数组,这样就完成了新增删。所以ArrayList在查询方面很有优势,但是增删上就显得有些麻烦。

然后就是LinkedList
LinkedList的底层是链表实现的,先看一下链表的特点,由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。我们常说的链表结构有单向链表与双向链表,LinkedList是一个双向链表。
一节单向链表

链表不能直接通过索引来找到元素,而是通过从头开始一个一个去找元素,会显得特别慢。
双向链表

但是链表的优势在增删方面。
链表的增删
只需要下一个元素的地址值,就能完成增删。
总结
ArrayList的特点:增删慢,查询快。
LinkedList的特点:增删快,查询慢。
我们可以根据不同的场景来分别选择不同的集合来存储数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值