一、介绍
- 底层是一个双向链表实现的List,内部每一个节点采用内部类Node表示,通过first、last引用分别指向链表的第一和最后一个元素
- 非线程安全,可以用Collections.synchronizedList()方法对其进行包装
- 允许重复元素
- 插入和删除效率高(只需要移动指针指向),查询效率低(需要遍历整个链表)
- 除了实现List父类的add方法,还增加了addFirst、addLast分别将元素插入头部和尾部两个方法
- 头插时,不需要考虑移位、以及扩容的问题,直接把元素定位到首位,然后用head指针指向即可
- 尾插时,与头插相比耗时点会在对象的实例化上面(new Node<>(l, e, null))
- 内存分配不需要连续的空间,只要机器内存足够,存储的数据容量不受限
LinkedList的实现方式决定了所有跟下标相关的操作都是线性时间,而在首段或者末尾删除元素只需要常数时间。为追求效率LinkedList没有实现同步(synchronized),如果需要多个线程并发访问,可以先采用Collections.synchronizedList()方法对其进行包装。
二、add()
add()
方法有两个版本,一个是add(E e)
,该方法在LinkedList的末尾插入元素,因为有last指向链表末尾,在末尾插入元素的花费是常数时间。只需要简单修改几个相关引用即可;另一个是add(int index, E element)
,该方法是在指定下表处插入元素,需要先通过线性查找找到具体位置,然后修改相关引用完成插入操作。
- 平安夜,请你吃苹果,吃个青苹果,祝你青春永驻,永不老!吃个黄苹果,祝你飞黄腾达,事业高!吃个红苹果,祝你红红火火,生活好!
- 千淘万漉虽辛苦,吹尽狂沙始到金。为每一个不懈奋斗的高考学子加油!
- 胜日寻芳泗水滨,心情快乐又缤纷。无边光景一时新,因为开心陪在身。等闲识得东风面,好似挚友做着伴。万紫千红总是春,只为美好不离分。让快乐美好时时相伴,祝你天天幸福如意。
- 美好的生命应该充满期待、惊喜和感激。
- 人生匆匆,讨厌的人就一笑而过,无须怀恨在心,保持一颗童心你会发现:没有解决不了的事,也没有过不去的坎。
- 放下紧张与畏惧带上信心和细致心无旁骛笔下生风。
- 任何人生建议,都是老生常谈。那些你听不进去的老话,总有一天会让你感慨万千。
- 圣诞老人是哪家快递的?活了十多年都没收到,差评。
- 没有谁能左右你的情绪,只有你自己不放过自己,不要再熬夜了,谁心里没有故事,只是学会了控制。
- 不管生活有多少颠沛流离,我都希望自己能慢慢成为一个,波澜不惊、处事不慌张的人。