🌈 前言🌈
本篇文章主要介绍LinkedList的常见使用以及部分理论知识
🍎欢迎点赞 👍 收藏 🍓留言评论 📝私信必回哟😁 🍎博主将持续更新学习记录,小宝们有任何问题都可以在评论区留言哦!😙
文章目录
一、什么是LinkedList1.1 链表数据结构1.2 双向链表1.3 动态大小1.4 插入和删除元素
二、LinkedList使用方法有哪些三、LinkedList源码分析🔥3.1新增🔥3.2删除🔥3.3修改🔥3.4查询
一、什么是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!!😀 如有问题,欢迎评论区批评指正😁
- 核舟记中的通假字及解释1、诎通屈,解释为弯曲; 2、衡通横,解释为横着的; 3、有通又,指用来连接整数和零数; 4、甫通父,指古代对男子的美称,多附与字之后;...
- 如何有效打开和恢复.bak文件?详细指南大揭秘!在我们的日常电脑使用中,备份文件可谓是数据保护的守护神,而其中的.bak文件更是其中的一员。你是否也曾面临.bak文件无法打开的困惑?不...
- 数据下载本网站支持IPV6访问 上海国际能源交易中心 版权所有 SHFE.COM.CN 建议使用谷歌浏览器、Microsoft Edge浏览器的最新版本 沪ICP备14004412号 沪公网安备 31...
- 三星S3怎么样?性能评测与使用体验三星Galaxy S3自2012年发布以来,凭借其出色的性能和用户体验在市场上赢得了广泛的关注。作为当时的旗舰手机,S3配备了1.4 GHz四核处理器和1GB的...
- 巴西十大女超模吉赛尔·邦辰 吉赛尔·邦辰不以独特或另类的风格取胜,源自南美的热辣身躯里面流淌着严肃自律的德国血液,傲人身材就是她的先天优势,修...
- 手机淘宝如何切换账号在当今数字化时代,手机淘宝已成为我们日常生活中不可或缺的购物平台。然而,有时我们可能需要切换账号,例如,使用家庭共享账号、管理...
- 欢乐斗牛下载QQ欢乐斗牛官方下载(含世界大战)2015-03-101KB 推荐理由:斗牛是一款地方性、游戏速度极快、刺激的棋牌玩法,主要流行在湖南、湖北、广东...
- 揭秘CAD中的角度计算难题:未知角度轻松求解,告别几何难题!在工程设计和建筑行业中,CAD(计算机辅助设计)软件的应用日益广泛。CAD软件不仅能够帮助我们绘制精确的图纸,还能在计算几何问题时提供...
- 明日之后 服务器维护,明日之后更新维护公告斗玩网(d.chinaz.com)报道:明日之后12月27日更新了什么?更新了那些内容?更新几点结束?一起来看看明日之后12月27日更新维护公告吧。亲爱的幸存者...
- q币怎么充值王者荣耀最近好多兄弟问我怎么用Q币充王者荣耀,其实方法超级简单,今天就用老玩家身份给大家唠唠。作为一个从S3赛季玩到现在的老鸟,我用Q币买皮...