我先给你说原理,最后再给你讲解你的这个现象的原因!
linkedLIst是链表结构,何为链表?就是元素之间的所有关系是通过引用关联的,比如说一节车厢,你只能知道当前车厢的上一节车厢是什么,当前车厢的下一节车厢是什么,这样,它在查询的时候,只能一个一个的遍历查询,所以他的查询效率很低,如果我们想删除一节车厢怎么办呢?就相当于自行车的链子,有一节坏了,我们是不是直接把坏的那节仍掉,然后让目标节的上一节指向目标节的下一节,增加同样,假如有abc三节车厢,你想在b后面增加车厢,那么只需要让目标车厢的上一节指向b,让目标车厢的下一节指向c,别的元素不动,所以它的增删在理论上比较快!
对于ArrayList是数组结构,何为数组?就是有相同特性的一组数据的箱子,比如说我有一个能容下10个苹果的箱子,我现在只放了5个苹果,那么放第6个是不是直接放进去就行了?呢我要放11个呢?这个箱子是不是放不下了?所以我是不是需要换个大点的箱子?这就是数组的扩容!同样,我们一般放箱子里面的东西是不是按照顺序放的?假如说是按abcd的顺序放的,我突然想添加一个e,这个e要放到c的后面,你是不是需要把d先拿出来,再把e放进去,再把d放进去?假如说c后面有10000个呢?你是不是要把这10000个都拿出来,把e放进去,再放这10000个?效率是不是很低了?所以,理论上它的增删比较慢!但是前面也说了,我们箱子里面放东西,都是按照顺序放的,所以我知道其中一个"地址",是不是就知道所有元素的地址?所以它的查询在理论上比较快!
特点说完了,如果你看的比较仔细的话应该就知道你的这个问题!链表增删快是有前提的,就是随机的增删!不是按照顺序一个一个的增删,这就是为什么你测的和你认知不一样的结果,其实,还是没有更深层次的理解何为链表何为数组!有用的话,希望关注!
是LinkedList插入数据慢吧 LinkedList是有序的,ArrayList是无序的。
楼上说的很对,不是你这样按顺序增的,指定特定位置才能看出他的效率,比如你有1万条数据,特定在899的位置增加一条或删除一条才能看出他的速度
简单的说一下,你这段代码并不是 插入数据,而是追加数据。
1、linkedlist 顾名思义,是基于链表结构实现的list , 链表结构在内存中每个索引的地址是不连续的,因此,每个索引,除了要存储 元素本身外,还要存储
上一个索引 的地址,和下一个索引的地址, 这样才能 把 每个索引 都 链接起来。 当在某个索引位置插入新的元素时,只需要 新申请一块内存,然后在
这块内存中 存入上一个所以的地址,下一个索引的地址,和元素本身, 然后 把 原来上一个索引指向 这个新内存, 原来的下一个索引 也指向新内存就行了
2、arraylist 你可以理解为长度可变的数组,它在内存中的每个元素的地址都是连续的,每个索引的位置只存储元素本身, 当在某个索引处插入
新的元素时,就需要把 原来 所有的元素统一向 后位移。
所以,对于list而言,如果 随机增删操作比较多,就使用linkedlist ,如果 向你那样在最后一个索引的后边增加元素,就使用Array
楼上说的对,添加跟插入是两回事。