🌈 前言🌈
本篇文章主要介绍LinkedList的常见使用以及部分理论知识
🍎欢迎点赞 👍 收藏 🍓留言评论 📝私信必回哟😁
🍎博主将持续更新学习记录,小宝们有任何问题都可以在评论区留言哦!😙
文章目录
一、什么是LinkedList
LinkedList是一种双向链表实现的集合,它以节点相互连接的方式存储数据,具有动态大小和高度灵活的特性。这使得LinkedList适合在特定场景下使用,尤其在插入和删除元素频繁的情况下。
1.1 链表数据结构
LinkedList基于链表数据结构,每个元素(节点)都包含数据和指向前一个节点和后一个节点的引用。这种结构使得在链表中插入和删除元素的开销相对较低,因为只需要调整相邻节点的引用,而不必像数组那样移动大量元素。
1.2 双向链表
LinkedList是双向链表,这意味着每个节点都有一个指向前一个节点和一个指向后一个节点的引用。这使得在双向链表中可以双向遍历,从而更容易实现某些操作。
1.3 动态大小
与数组不同,LinkedList的大小可以动态增长或缩小。当需要添加或移除元素时,它可以根据需要自动调整大小,而无需预先分配固定大小的内存。
1.4 插入和删除元素
由于LinkedList的特性,它在插入和删除元素方面非常高效。当插入元素时,只需更改相邻节点的引用,而不需要移动整个集合。同样,删除元素也只需要更新相邻节点的引用,而不必移动其他元素。
二、LinkedList使用方法有哪些
常用方法
方法 | 描述 |
---|---|
public boolean add(E e) | 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
public void add(int index, E element) | 向指定位置插入元素。 |
public boolean addAll(Collection c) | 将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。 |
public boolean addAll(int index, Collection c) | 将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。 |
public void addFirst(E e) | 元素添加到头部。 |
public void addLast(E e) | 元素添加到尾部。 |
public boolean offer(E e) | 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerFirst(E e) | 头部插入元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功为 true,失败为 false。 |
public void clear() | 清空链表。 |
public E removeFirst() | 删除并返回第一个元素。 |
public E removeLast() | 删除并返回最后一个元素。 |
public boolean remove(Object o) | 删除某一元素,返回是否成功,成功为 true,失败为 false。 |
public E remove(int index) | 删除指定位置的元素。 |
public E poll() | 删除并返回第一个元素。 |
public E remove() | 删除并返回第一个元素。 |
public boolean contains(Object o) | 判断是否含有某一元素。 |
public E get(int index) | 返回指定位置的元素。 |
public E getFirst() | 返回第一个元素。 |
public E getLast() | 返回最后一个元素。 |
public int indexOf(Object o) | 查找指定元素从前往后第一次出现的索引。 |
public int lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 |
public E peek() | 返回第一个元素。 |
public E element() | 返回第一个元素。 |
public E peekFirst() | 返回头部元素。 |
public E peekLast() | 返回尾部元素。 |
public E set(int index, E element) | 设置指定位置的元素。 |
public Object clone() | 克隆该列表。 |
public Iterator descendingIterator() | 返回倒序迭代器。 |
public int size() | 返回链表元素个数。 |
public ListIterator listIterator(int index) | 返回从指定位置开始到末尾的迭代器。 |
public Object[] toArray() | 返回一个由链表元素组成的数组。 |
public T[] toArray(T[] a) | 返回一个由链表元素转换类型而成的数组。 |
以上表格便是LinkedList常用方法了。
三、LinkedList源码分析
🔥3.1新增
add(E e) 方法:将元素添加到链表尾部
代码演示
public class Test{
public void static main(String [] args){
LinkedList linkedList=new LinkedList();
linkedList.add("张三");
linkedList.add("李四");
linkedList.add("王五");
for (int i = 0; i < linkedList.size(); i++) {
System.out.println(linkedList.get(i));
}
}
}
运行如下:
add(int index,E e):在指定位置添加元素
linkedList.add(1,“赵六”);
addFirst(E e): 将元素添加到链表头部
linkedList.addFirst(“小明”);
addLast(E e): 将元素添加到链表尾部,与 add(E e) 方法一样
linkedList.addLast(“小红”);
🔥3.2删除
remove() ,removeFirst(),pop(): 删除头节点
代码演示
public class Test{
public void static main(String [] args){
LinkedList linkedList=new LinkedList();
linkedList.add("张三");
linkedList.add("李四");
linkedList.add("王五");
linkedList.remove();
for (int i = 0; i < linkedList.size(); i++) {
System.out.println(linkedList.get(i));
}
}
}
结果如下:
removeLast(),pollLast(): 删除尾节点
linkedList.removeLast();
remove(Object o): 删除指定元素
linkedList.remove(“张三”);
remove(int index):删除指定位置的元素
linkedList.remove(0);
🔥3.3修改
set():根据集合下标修改元素
代码演示
public class Test{
public void static main(String [] args){
LinkedList linkedList=new LinkedList();
linkedList.add("张三");
linkedList.add("李四");
linkedList.add("王五");
linkedList.set(0,"小明");
for (int i = 0; i < linkedList.size(); i++) {
System.out.println(linkedList.get(i));
}
}
}
运行结果:
🔥3.4查询
使用最适用的for循环即可:
public class Test{
public void static main(String [] args){
LinkedList linkedList=new LinkedList();
for (int i = 0; i < linkedList.size(); i++) {
System.out.println(linkedList.get(i));
}
}
}
}
以上只是采用了一些简单的增删改查方法演示,还有很多常用方法赶快去使用吧!
总结:
LinkedLsit集合:
1、数据结构:双链表 、查询慢、增删快
2、 LinkedList 不会出现扩容的问题,所以比较适合随机位置增、删。但是其基于链表实现,所以在定位时需要线性扫描,效率比较低。
⭐最后⭐
总结不易,希望小宝们不要吝啬你们的👍哟(^U^)ノ~YO!!😀
如有问题,欢迎评论区批评指正😁