java-浅学LinkedList
目录
LinkedList
LinkedList 的底层就是一个链表线性结构,链表除了要有一个节点对象外,根据单向链表和双向链表的不同,还有一个或者两个指针。 LinkedList属于双向链表。
- LinkedList 继承了 AbstractSequentialList 类。
- LinkedList 实现了 Queue 接口,可作为队列使用。
- LinkedList 实现了 List 接口,可进行列表的相关操作。
- LinkedList 实现了 Deque 接口,可作为队列使用。
- LinkedList 实现了 Cloneable 接口,可实现克隆。
- LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
add()和push()方法
通过这两种方法均可对LinkedList进行元素添加,但不同点在于add是在链表后面添加一个元素,而push是在链表前面 添加一个元素,这是添加顺序上的区别。
get()方法
- get(int index):按照下边获取元素
- getFirst():获取第一个元素
- getLast():获取最后一个元素
remove 、pop、poll移除方法
- remove();移除链表中第一个元素;
- remove(int index):移除链表中指定位置的元素;
- removeFirst():移除链表中第一个元素,与remove类似;
- removeLast():移除链表中最后一个元素;
- boolean remove(Object o):移除链表中指定的元素;
- boolean removeFirstOccurrence(Object o):移除链表中第一次出现所在位置的元素;
- boolean removeLastOccurrence(Object o):移除链表中最后一次出现所在位置的元素;
- pop():与removeFirst一样,实际上它就是removeFirst;
- poll():查询并移除第一个元素;
与ArrayList的区别
在生产开发中我们更多的是使用ArrayList,ArrayList与LinkedList的区别如下:
ArrayList
- 基于数组,需要连续内存
- 随机访问快(指根据下标访问)
- 尾部插入,删除性能可以,其他部分的插入和删除因为会移动数据,导致性能较低
- 可以利用cpu缓存,局部性原理
LinkedList
- 基于双向链表,无需连续内存
- 随机访问慢(因为要沿着链表进行遍历搜索)
- 头尾插入删除的性能高,中间的插入删除性能不如ArrayList,因为查找消耗了大量的时间
- 占用内存多(因为采用的是链表结构,需要创建两个指针和一个节点)