Java基础知识总结(54)

(1) 手动实现LinkedList

LinkedList底层结构实现和ArrayList底层数据结构实现有着本质上的区别
ArrayList底层实现主要依赖数组,而LinkedList底层实现则是依赖链表。

/**

  • LinkedList的实现是双向链表,因此需要定义首节点和尾结点。

  • 并且需要保存链表中元素的个数。此外,还需要提供无参构造方法,

  • 在构造方法内初始化一个空链表。 */ public class MyLinkedList { private Node first; private Node last; private int size;

    /**

    • 在尾部添加节点

    • @param o

    • @return */ public boolean add(Object o){ if(size == 0){ Node newNode = new Node(null,o,null); first = newNode; last = newNode; }else{ //实例化新节点 Node newNode = new Node(last,o,null); last.next = newNode; last = newNode; } size++; return true; }

/*** 在指定索引处添加节点* @param index* @param o* @return*/
public boolean add(int index,Object o){if(index<0 || index>size){throw new IndexOutOfBoundsException("越界!");}if(index == 0){//获取指定索引处的节点Node newNode = getNode(index);//获取首节点的前置节点Node pre = first.pre;//首节点的前置节点指向新节点pre.next = newNode;//将新节点作为首节点first = newNode;size++;}if(index == size){//直接将对象添加到尾部add(o);}//获取索引的节点Node indexNode = getNode(index);//获取索引节点的前置节点Node preNode = indexNode.pre;//实例化新节点 per指向索引节点的前置节点,next指向索引节点的后置节点Node newNode = new Node(preNode,o,indexNode);//索引节点前置节点的next指向新节点preNode.next = newNode;//索引节点的pre指向新节点indexNode.pre = newNode;size++;return true;
}
​
/*** 删除对应索引处的节点* @param index* @return*/
public Object remove(int index){if(index<0 || index>=size){throw new IndexOutOfBoundsException("越界");}//初始化返回的值Object o = null;//删除首节点if(index ==0) {//获取首节点的节点值o = first.date;//获取首节点的后置节点Node node = first.next;//首节点的next为nullfirst.next = null;//将首节点的后置节点作为首节点first = node;}//删除尾节点else if(index == size-1){o = last.date;//获取尾节点的前置节点Node perNode = last.pre;//尾节点的前置节点的next置为nullperNode.next = null;//将索引节点的尾节点作为尾节点last = perNode;}else{//删除中间节点//获取索引处节点Node indexNode = getNode(index);o = indexNode.date;//获取索引节点的前置节点Node preNode = indexNode.pre;//获取索引节点的后置节点Node nextNode = indexNode.next;//将索引节点的前置节点指向索引节点的后置节点preNode.next = nextNode;//将索引节点的后置节点指向索引节点的前置节点nextNode.pre = preNode;//将索引节点的pre置为nullindexNode.pre = null;//将索引节点的next置为nullindexNode.next = null;}size--;return o;
}
​
/*** 修改索引处节点的元素值* @param index* @param o* @return*/
public Object set(int index,Object o){if(index<0||index>=size){throw new IndexOutOfBoundsException("越界!");}//获取对应索引处的节点Node indexNode = getNode(index);//获取要删除节点的值Object oldValue = indexNode.date;//将要修改的值赋值给目标节点indexNode.date = o;return oldValue;
}
​
/*** 获取双向链表的容量* @return*/
public int size(){return size;
}
​
/*** 获取对应索引处节点的元素值* @param index* @return*/
public Object get(int index){return getNode(index).date;
}
​
/*** 获取对应索引处的Node对象* @param index* @return*/
public Node getNode(int index){if(index<0 || index>=size){throw new  IndexOutOfBoundsException("越界");}//获取首节点Node current = first;for (int i = 0; i < index&&current!=null; i++) {//获取下一个节点current = current.next;}return current;
}
​
/*** 定义链表数据节点*/
private class Node{private Node pre;private Object date;private Node next;
​public Node(Node pre,Object o,Node next){this.pre = pre;this.date = o;this.next = next;}
}

}

/**

  • 测试类 */ public class Test { public static void main(String[] args) { MyLinkedList list = new MyLinkedList(); list.add("111"); list.add("222"); list.add("333"); list.add("444"); list.set(1,"777"); list.set(2,"888"); list.remove(0); list.remove(1); System.out.println("-------------"); for (int i = 0; i <list.size(); i++) { System.out.println(list.get(i)); } } }

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

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

相关文章

群晖双硬盘实时备份(WebDAV Server+Cloud Sync)

安装和设置 WebDAV Server WebDAV 是一种基于HTTP的协议扩展&#xff0c;它允许用户在远程Web服务器上进行文档的编辑和管理&#xff0c;就如同这些文件存储在本地计算机上一样。使用WebDAV&#xff0c;用户可以创建、移动、复制和修改文件和文件夹。 安装和设置 Cloud Sync…

2024/4/12 网络编程day2

OSI模型中的网络层次有哪些&#xff1f; 物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&#xff0c;表示层&#xff0c;应用层TCP/IP协议族的分层有哪些&#xff1f; 网络接口层&#xff0c;网络层&#xff0c;运输层&#xff0c;应用层…

使用 Prometheus 在 KubeSphere 上监控 KubeEdge 边缘节点(Jetson) CPU、GPU 状态

作者&#xff1a;朱亚光&#xff0c;之江实验室工程师&#xff0c;云原生/开源爱好者。 KubeSphere 边缘节点的可观测性 在边缘计算场景下&#xff0c;KubeSphere 基于 KubeEdge 实现应用与工作负载在云端与边缘节点的统一分发与管理&#xff0c;解决在海量边、端设备上完成应…

前端面试问题汇总 - 浏览器篇

1. 本地存储有哪些&#xff0c;区别是什么&#xff1f; Cookies&#xff08;Cookie&#xff09;&#xff1a; 是存储在用户计算机上的小型文本文件&#xff0c;由网站服务器发送到用户的浏览器&#xff0c;然后在用户访问网站时由浏览器发送回服务器。Cookies 可以用来存储用户…

地球上四大洋介绍

地球上四大洋的分布是&#xff1a; 太平洋&#xff1a;太平洋是世界上最大的海洋&#xff0c;覆盖了约三分之一的地球表面。它位于亚洲、澳大利亚、美洲和南极洲之间。太平洋的面积约为1.6亿平方公里&#xff0c;拥有世界上最深的点——马里亚纳海沟。 大西洋&#xff1a;大西…

2024HW --> 安全产品 Powershell无文件落地攻击

在HW中&#xff0c;除了了解中间件&#xff0c;web漏洞&#xff0c;这些攻击的手法&#xff0c;还得了解应急响应&#xff0c;安全产品&#xff0c;入侵排查&#xff0c;溯源反制...... 那么今天&#xff0c;就来说一下安全产品&#xff08;安全公司我就不说了&#xff0c;这个…

ffmpeg cuda硬件解码后处理使用opengl渲染,全硬件流程

1 ffmpeg 硬件解码 使用硬件解码后不要transfer到内存&#xff0c;使用cuda转化nv12 -> bgr24 转化完毕后cuda里面存了一份bgr24 2 gpumat 和 cuda 互操作 如果需要opencv gpumat直接使用cuda内存&#xff0c;则可以手动构造gpumat 可以使用gpumat的各种函数 uchar3* cu…

6-139 大整数存储-数组

本题要求实现一个函数,实现大整数以整数形式存储。大整数按每4位保存在整数数组中,如果大整数位数不是4的倍数,则将保证低位都按4位一存。如“123456789”保存为1,2345,6789。大整数以字符串形式输入 int convert(char a[],int x[]); 函数接口定义: a 是以字符串形式输…

001vscode为什么设置不了中文?

VSCode中文插件安装 在VSCode中设置中文的首要步骤是安装“Chinese (Simplified) Language Pack for Visual Studio Code”扩展插件。这一过程十分简单&#xff0c;只需打开VSCode&#xff0c;进入扩展市场&#xff0c;搜索“ Chinese (Simplified) Language Pack ”然后点击…

【MATLAB源码-第49期】基于蚁群算法(ACO)算法的栅格路径规划,输出最佳路径图和算法收敛曲线图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蚁群算法是一种模拟自然界蚂蚁觅食行为的启发式优化算法。在蚁群系统中&#xff0c;通过模拟蚂蚁之间通过信息素沟通的方式来寻找最短路径。 在栅格路径规划中&#xff0c;蚁群算法的基本步骤如下&#xff1a; 1. 初始化: …

MES实施优势有哪些?MES制造执行系统的主要内容

各个行业之间也开始进入到了激烈的竞争当中&#xff0c;很多企业为了能够有效提升企业竞争力&#xff0c;都会通过提升自身实力的方式来提升竞争力。一些制造业也会在经营过程当中使用到MES系统&#xff0c;那么&#xff0c;mes系统的优势有哪些呢&#xff1f; 1、优化企业现场…

mysql dump导出导入数据

前言 mysqldump是MySQL数据库中一个非常有用的命令行工具&#xff0c;用于备份和还原数据库。它可以将整个数据库或者特定的表导出为一个SQL文件&#xff0c;以便在需要时进行恢复或迁移。 使用mysqldump可以执行以下操作&#xff1a; 备份数据库&#xff1a;可以使用mysqld…

ELK日志分析系统+Filebeat

目录 一、Filebeat介绍 1、Filebeat简介 2、Filebeat的工作方式 3、filebeat工作流程 4、Filebeat的作用 5、filebeat的用途 1.为什么要用filebeat来收集日志&#xff1f;为什么不直接用logstash收集日志&#xff1f; 2.filebeat和logstash的区别 二、部署(ELFK)Fileb…

自动化测试Junit

1.什么是Junit JUint是Java编程语言的单元测试框架&#xff0c;用于编写和运行可重复的自动化测试。 JUnit 促进了“先测试后编码”TDD的理念&#xff0c;强调建立测试数据的一段代码&#xff0c;可以先测试&#xff0c;然后再应用。这个方法就好比“测试一点&#xff0c;编码一…

现在有一个二叉树, 父节点保存子节点字符总长度。

现在有一个二叉树&#xff0c; 父节点保存子节点字符总长度。 typedef struct Node{ char *data; struct Node* left; struct Node* rigth; int length; }Node,*tree; 写一个求substring的功能。 Now, if we call substring with lower idx2 and upper idx7, the first part ca…

【SERVERLESS】AWS Lambda上实操

通过Serverless的发展历程及带给我们的挑战&#xff0c;引出我们改如何改变思路&#xff0c;化繁为简&#xff0c;趋利避害&#xff0c;更好的利用其优势&#xff0c;来释放企业效能&#xff0c;为创造带来无限可能。 一 Serverless概述 无服务器计算近年来与云原生计算都是在…

OSPF星型拓扑和MGRE全连

一&#xff0c;拓扑 二&#xff0c;要求 1&#xff0c;R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2&#xff0c;R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c; 3&#xff0c;R1为中心站点所有私有网段可以互相通讯&#xff0c;私有网段…

antd+vue——datepicker日期控件——禁用日期功能

需求&#xff1a;今天之前的日期禁用 <a-date-pickerv-model.trim"formNE.deliveryTime":disabled-date"disabledDate"valueFormat"YYYY-MM-DD"allowClearstyle"width: 100%" />禁用日期的范围&#xff1a; //时间范围 disab…

第14届java A组蓝桥杯做题记录

A题 特殊日期 package Java14省赛.Java研究生组;import java.time.Year; //特殊判断一下2月份&#xff0c;leaf 为true 1 import java.util.*;import 蓝桥杯.dfs_n皇后; public class 特殊日期 {static int sum(int d){int res 0;while(d > 0){res d % 10;d / 10;}return…

Java GC了解

Jstack找到线程的快照 jvm提供其他命令作用 jps&#xff1a; 虚拟机进程状况工具&#xff0c;类似linux的ps命令 jstat&#xff1a;虚拟机统计信息监视工具&#xff0c;经常看gc情况的会使用到 jinfo: java配置信息工具 jmap&#xff1a; java内存映射工具&#xff0c;dump&am…