- LinkedList允许空
- LinkedList允许重复数据
- LinkedList有序
- LinkedList非线程安全
LinkedList是链表结构,这个在很多数据结构的书籍里都能知道的 就是有前有后有元素
pre next element
List<String> list = new LinkedList<String>();
list.add("111");
增
在new LinkedList 里面做了什么?
首先在内存中开辟一块地
然后生成了一个叫头(header)的(下面都叫head)
这个head 也是个完整的结构,即有pre next ele
不过pre,next 存的是一个4个字节地址,比如0×00000000
ele就是Null
然后list.add(“111”)做了什么
也是生成了一个结构,pre next ele 这个结构在内存里的地址是0×00000001
那么head这个结构的next指向111这个结构的内存地址,即0×00000001
那么 111这个结构的pre指向head的内存地址,即0×00000000
111这个结构的ele 放如”111”,next 放如head的地址0×00000000
那么这就是个双向列表了,只不过好像个环?
查
由于是双向列表, 所以每次从中间的元素开始查找就好了.
比如有1000个元素, 要找到第999个元素,我们只要从500开始往后就好了,不用从0这个元素开始
删
LinkedList支持按元素删除和按下标删除
然后也是和查是一样的,找到正确的下标,然后吧pre next ele 设置为null,让gc回收就好了.
LinkedList和ArrayList
顺序插入速度ArrayList会比较快,因为ArrayList是基于数组实现的
LinkedList则不同,每次顺序插入的时候LinkedList将new一个对象出来
LinkedList做插入、删除的时候,慢在寻址,快在只需要改变前后Entry的引用地址ArrayList做插入、删除的时候,慢在数组元素的批量copy,快在寻址
有一点注意如果使用普通for循环遍历LinkedList,其遍历速度将慢得令人发指。
尽量用foreach吧
本文详细介绍了LinkedList的特点,包括允许空值、允许重复数据、有序性及非线程安全性等,并深入探讨了LinkedList内部结构与操作原理,如插入、查找与删除过程。同时对比了LinkedList与ArrayList在不同场景下的性能差异。
1700

被折叠的 条评论
为什么被折叠?



