ArrayList与LinkedList的区别

ArrayList与LinkedList有什么区别

  1. 底层实现原理不同:
    ArrayList底层实现是数组,LinkedList是双向链表
    基于实现原理的不同
    ArrayList更适合于随机查找
    ArrayList指定下标查找元素是非常快的,例如arrayList.get(1),因为数组已经给元素分配好了内存空间,可以直接去取。
    而LinkedList如果想去linkedList.get(1)的话需要去循环遍历。
    但是LinkedList如果查询第一个元素和最后一个元素的话也是非常快速的,因为LinkedList持续记录了第一个和最后一个元素,可以使用linkedList.getFirst()和linkedList.getLast()获取,不涉及遍历。
    LinkedList更适合于添加删除
    ArrayList添加时两种方法:
    arrayList.add(“a”)和arrayList.add(1,“a”),
    arrayList.add(“a”)是在数组最后一个位置添加元素,ArrayList添加涉及到数组的扩容,当初始化一个ArrayList时,他的长度为0,当添加第一个元素时会给其分配一个10的长度,在我们执行add方法时,如果此时长度不足会去调用grow()扩容方法,每次扩容长度为上次的1.5倍,小数则会舍弃,即为10->15->22…
    如果add时不需要扩容那么速度还是很快的,如果需要扩容时那么则会增加扩容的开销。
    arrayList.add(1,“a”)是在指定位置添加元素
    相应的arrayList.add(1,“a”)这种方式,如果原位置上已经有元素,那么会增加元素向后移动的开销。
    对应的linkedList.add(“a”)则会在链表的最后增加一个元素,不会涉及到扩容,而另一种linkedList.add(1,“a”),这种插入操作的话LinkedList也需要循环去取到下标,那此时的速度取决于下标的大小。

2.LinkedList实现了deque接口,所以LinkedList还可以当做双端队列使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值