LinkedList链表

LinkedList 的全面说明

  • LinkList底层实现了双向链表和双端列特点
  • 可以添加任意元素(元素可以重复),包括null
  • 线程不安全,没有实现同步

LinkedList 的底层操作机制

  • LinkedList底层维护了一个双向链表
  • LinkList中维护了两个属性first和last分别指向 首节点和尾结点
  • 每个节点(Node对象),里面有维护了prev、next、item三个属性
    prev:指向前一个
    next:指向后一个
    最终实现双向链表
  • ListedList的元素的添加和删除,不是通过数组完成的,相对来说效率高
  • 模拟一个简单的双向链表-代码:
public class LinkedList_ {public static void main(String[] args) {//模拟一个简单的双向链表//1,创建Node对象Node jack = new Node("jack");Node tom = new Node("tom");Node zl = new Node("zl");//2,连接3个结点,形成双向链表//      jack -> tom -> zljack.next = tom;tom.next = zl;//      zl -> tom -> jackzl.pre = tom;tom.pre = jack;//3,指定双向链表的头节点-jack;尾结点-zlNode first = jack;Node last = zl;//4,从头到尾遍历System.out.println("=======从头到尾遍历===========");while (true){if (first == null){break;}System.out.println(first);first = first.next;}//5,从尾到头遍历System.out.println("=====从尾到头遍历======");while (true){if (last==null){break;}System.out.println(last);last=last.pre;}//6,添加对象/数据System.out.println("======添加数据后======");Node add1 = new Node("add1");//添加到jack 和 tom 中间add1.next = tom;add1.pre=jack;tom.pre=add1;jack.next=add1;first = jack;while (true){if (first == null){break;}System.out.println(first);first = first.next;}System.out.println("=======添加数组后从后往前遍历=========");last=zl;while (true){if (last==null){break;}System.out.println(last);last=last.pre;}}
}//定义一个Node类,Node对象,表示双向链表的一个节点
class Node {public Object item;//真正存放数据public Node next;//指向后一个结点public Node pre;//指向前一个节点public Node(Object item) {this.item = item;}@Overridepublic String toString() {return "Node{" +"item=" + item +'}';}
}

结果
在这里插入图片描述
LinkedList的增删改查案例

public class LinkedListCRUD {@SuppressWarnings({"all"})public static void main(String[] args) {LinkedList linkedList = new LinkedList();linkedList.add(1);linkedList.add(2);linkedList.add(3);System.out.println("linkedList=" + linkedList);//删除节点
//        linkedList.remove(); // 这里默认删除的是第一个结点linkedList.remove(1);System.out.println("删除后linkedList="+ linkedList);//修改某个节点  将index=1位置的对象修改为999linkedList.set(1,999);System.out.println("修改后的linkedList"+linkedList);//得到某个节点System.out.println("得到下标为1的对象"+linkedList.get(1));//遍历方式,因为LinkedList 是实现了 List接口,因此遍历方式为List的三个遍历方式System.out.println("===LinkeList 遍历迭代器====");Iterator iterator = linkedList.iterator();while (iterator.hasNext()) {Object next = iterator.next();System.out.println(next);}System.out.println("===LinkeList 遍历增强 for====");for (Object o:linkedList){System.out.println(o);}System.out.println("===LinkeList 遍历普通 for====");for (int i = 0; i < linkedList.size(); i++) {System.out.println(linkedList.get(i));}}}

结果
在这里插入图片描述

ArrayList 和 LinkedList 的比较

LinkedList的增删改查

  • 增:1,创建结点对象;2,通过链表追加前后连接;3,遍历
  • 删: linkedList.remove(); // 这里默认删除的是第一个结点
  • 改:linkedList.set(1,999); 将index=1位置的对象修改为999
  • 查:三种方式遍历:1,遍历迭代器;2,遍历增强for;3,遍历普通for

ArrayList的增删改查

  • 增:扩容,创建新数组,复制,比较麻烦
  • 删:创建新数组,复制,比较麻烦
  • 改:数组名[下标] 直接修改
  • 查:for循环遍历
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/685411.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VBA_NZ系列工具NZ06:VBA创建PDF文件说明

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…

CoT个人记录

1.Few-shot COT&#xff08;CoT, 思维链&#xff09; 通过向大语言模型展示一些少量的例子(Few-shot )&#xff0c;在样例中解释推理过程&#xff0c;大语言模型在回答时也会模拟人类思考推理的过程生成中间的推理步骤,&#xff0c;再得到答案。这种推理的解释往往会引导出更准…

1725 ssm资产管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm资产管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/…

拼团商城系统搭建如何做?

团购商城就是团体到商城进行购物的一种交易方式&#xff0c;其场景应用包括装修建材、家居用品、汽车、房屋、家电、电脑、生活用品等各个领域。作为消费者&#xff0c;也能从中享受5%到40%不等的商品优惠幅度。那么&#xff0c;拼团商城系统搭建如何做&#xff1f;我们从优势、…

最长递增子序列 详解 CPP

目录 前言思路梳理题解最优思路 我的思路思路一 考虑连续 对一半 思路二 基于思路一的优化 思路三 基于思路二的优化 √ 通过了但是效率太低 我的代码 前言 今天继续做动态dp的第三题&#xff0c;最大子序和&#xff0c;昨天做最大连续子数组的和已经有一些写状态转移方程的经…

2010年认证杯SPSSPRO杯数学建模D题(第一阶段)服务网点的分布全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 D题 服务网点的分布 原题再现&#xff1a; 服务网点、通讯基站的设置&#xff0c;都存在如何设置较少的站点&#xff0c;获得较大效益的问题。通讯基站的覆盖范围一般是圆形的&#xff0c;而消防、快餐、快递服务则受到道路情况和到达时间的限…

这份走心的母亲节礼物清单,请查收!

老舍在《我的母亲》中写道&#xff1a;“人&#xff0c;活到八九十岁&#xff0c;有母亲在&#xff0c;便可以多少还有点孩子气。失了慈母便像花插在瓶子里&#xff0c;虽然还有色有香&#xff0c;却失去了根。有母亲的人&#xff0c;心里是安定的。”母亲&#xff0c;对我们每…

Git详解之五:分布式Git

为了便于项目中的所有开发者分享代码&#xff0c;我们准备好了一台服务器存放远程 Git 仓库。经过前面几章的学习&#xff0c;我们已经学会了一些基本的本地工作流程中所需用到的命令。接下来&#xff0c;我们要学习下如何利用 Git 来组织和完成分布式工作流程。 特别是&#…

搭建知识库必备:12个开源 Wiki 软件工具盘点

在任何成功的公司中&#xff0c;部门间的知识共享是至关重要的。如果没有一个简单的信息交流方法&#xff0c;团队怎样才能有效合作呢&#xff1f;Wiki软件提供了一种创建、组织及在全公司范围内分享知识的直接方法。但是&#xff0c;哪一种Wiki软件是最佳的选择呢&#xff1f;…

论文笔记:PRIVACY ISSUES IN LARGE LANGUAGE MODELS: A SURVEY

1 intro 1.1 motivation 2022年11月ChatGPT的推出引起了全球轰动&#xff0c;推动了人工智能研究、初创企业活动以及大型语言模型&#xff08;LLM&#xff09;的消费者采用。到2023年底&#xff0c;LLM的进展持续加速&#xff0c;但人们普遍认为&#xff0c;尽管LLM带来了变革…

Day65:代码随想录训练营总结

两个月的算法训练营之旅圆满落幕&#xff0c;回首这段时光&#xff0c;我深感自己错过了许多早日成长的机会&#xff0c;如今不禁懊悔没有更早地报名参与。 这段充实的日子里&#xff0c;我遵循着训练营精心设计的计划&#xff0c;攻克了上百道力扣题目。从最初对编程语法的生…

【C++】Vector详解

Vector是什么&#xff1f; vector是C&#xff08;STL&#xff09;中的一种序列容器Vector是一个动态数组&#xff0c;内存空间是连续的&#xff0c;支持随机访问&#xff0c;支持迭代器访问 Vector代码实现 变量指向 代码初始化 #include<iostream> using namespace …