自主代码封装LinkedList集合对象

Java程序设计:集合对象 Java集合:集合框架介绍;List、LinkedList、Vector、Set 阅读详情

LinkedList集合内部是链表数据结构存储元素机制,前一个存储节点对象记住下一个存储节点对象的地址这样环环相扣形成一个链条,就像自行车的链条一样.每存储一个元素在链表最后节点处记住新元素对象的地址,当需要删除一个元素只需在被删除元素的前一个元素切断与被删除元素的地址引用替换成指向被删除元素后一个元素的地址,被删除元素因为没有被任何对象地址引用 则会被垃圾回收清理从而达到删除元素的效果.
了解链表结构的原理后我们用代码实现这个案例吧!具体代码要点细节部分已经注释好了 整理好思路仔细阅读即可.

首先我们创建一个节点类 属性value用于存储数据 next表示下一个节点对象

package LinkedList;
public class Node {	//定义节点对象 用用于存储 元素value 关联一下一个节点
	private Object value;
	private Node next;
	public Node(Object value) {	//构造方法传一个元素对象并存储存储
		this.value = value;
	}
	public Object getValue() {	//返回当前节点对象
		return value;
	}
	public void setValue(Object value) {	//设置当前节点对象
		this.value = value;
	}
	public Node getNext() {		//返回下一个节点对象
		return next;
	}
	public void setNext(Node next) {	//设置下一个节点对象
		this.next = next;
	}
}

有了节点对象作为链表结构的铺垫 我们现在再创建LinkedList的描述类吧

package LinkedList;
public class MyLinkedList {
	private Node first;	  //定义一个头部节点 代表链表集合第一个元素
	private int size = 0;	//定义链表集合容量大小
	public int getSize(){	//返回集合大小方法
		return size;
	}
	public void addValue(Object value){	//添加元素方法
		Node newNode = new Node(value);	//new一个节点对象存储元素
		if(size == 0){	//先判断是否为第一个元素
			first= newNode;	//将头部节点对象指向刚存下一个元素的新节点
		}else{
			Node temp = first;	//不是第一个节点  则需要一个临时节点充当指针 从头往后遍历
			while(temp.getNext()!=null){ //临时节点下一个节点对象不为空时 
				temp=temp.getNext();	//指针临时节点向后移动一位 指向一下节点对象
			}	//循环保证指针节点最后指向最后一个元素
			temp.setNext(newNode);	//临时节点关联的下一个节点对象指向 将新节点
		}
		size++; //存储成功size+1
	}
	public Object getValue(int index){	//取出指定索引下的元素
		Node temp = first; //指针指向头部元素
		for(int i = 0;i<index;i++){
			temp =temp.getNext(); //指针指向index元素的前一个元素时循环结束
		}						  //并取出index前一位元素的一下一个元素 也就是当前index下的元素
		return temp.getValue();   //直接返回index下的元素
	}
	public void setValue(int index,Object value){ //设置索引下的元素 原理同getValue方法
		Node temp = first;
		for(int i = 0;i<index;i++){
			temp =temp.getNext();
		}
		temp.setValue(value);
	}
	public void clear(){	//清空集合方法
		size = 0;
		first =null;	//链表数据结构最关键的是头部元素 当头部元素为空时后面的元素也无法找到
	}					//涉及到jvm虚拟机垃圾回收机制  细节请参考深入理解jvm虚拟机一书
	
	public void removeAt(int index){ //删除指定索引下的元素
		if(index == 0){	//假如删除头部元素:将头部对象指向原来头部节点对象的下一个节点对象
		first = first.getNext(); //原来的头部节点对象因为没有被地址引用会被jvm垃圾回收 达到删除效果
		}else{
			Node temp = first; //指针从头部往后遍历
			for(int i = 0;i<index-1;i++){ //遍历到index元素的前两位元素下
				temp = temp.getNext();
			} //指针从index的前一个元素关联到index后一位元素 孤立index下元素导致没有被地址指向被垃圾回收
			temp.setNext(temp.getNext().getNext());
		}
		size--; //元素删除成功 size-1
	}
}
public class LinkedDemo {

	public static void main(String[] args) {
		MyLinkedList list = new MyLinkedList();
		list.addValue(0);
		list.addValue(1);
		list.addValue(2);
		list.addValue(3);
		list.addValue(4);
		list.addValue(5);
		
		for(int i = 0;i<list.getSize();i++){
			System.out.println(list.getValue(i));
		}
	}	
}

这样节点对象和list对象相辅相成,一个自主封装的链表集合就完成了;其中涉及到数据结构和一点逻辑算法的知识,对于初学java基础和对算法基础比较薄弱的朋友这个案例可能有点不能接受,但是不要怕随着时间推移每天学习的积累 这两段代码花时间多琢磨一下必定能参透其中的真谛! 码字不易代码加注释更不易,觉得有收获就小小点个赞吧! ~~~~~~~~~~~~ :)

【Java集合进阶】Collection 体系集合详解(ArrayList,LinkedList,HashSet,TreeSet...) 集合是对象的容器,定义了多个对对象操作的方法,实现了和数组一样的功能,集合类全部位于`java.util.*` 包中,使用该类前需要进行导包操作导入相应的 Java 类。Java集合结构庞大,其主要分为两大类,单列集合 Collection 和双列集合 map。所谓的单列集合是一次只能添加一个数据,而双列集合就是一次可以添加一对数据。 阅读详情

相关推荐

jdk1.8中文完全参考手册.zip

jdk1.8中文完全参考手册

对 ArrayList 进行封装-使用链表进行封装

文章目录前言目标实现使用DEBUG 代码 前言 ArrayList 底层是数组.所以遍历比较快. 但是有个缺点是扩容的时候,需要将 已有的 copy 到 新的 数组中. 这会造成 内存和时间上面的浪费. 目标 我们封装一个链表类. 内部包含一个ArrayList的类. 如果ArrayList 需要扩容的时候,直接在创建一个 ArrayList 既可以了. 这么一来,就省下了 扩容的时间和内存 实现 private int cap; private ArrayList<T> lis

DXH9701的博客 409

jdk_8中文文档

jdk中文文档,积分便宜你的不二选择, jdk中文文档,积分便宜你的不二选择, jdk中文文档,积分便宜你的不二选择

Java中的LinkedLIst

LinkedList中的每个元素都包含一个指向前一个元素和后一个元素的指针,因此可以在列表中的任何位置添加或删除元素。可以使用add()方法向LinkedList中添加元素。add()方法有两个重载版本:一个将元素添加到链表末尾,一个将元素添加到指定位置。要创建LinkedList对象,可以使用无参构造函数,也可以在创建时初始化元素。可以使用remove()方法从LinkedList中删除指定位置的元素。可以使用get()方法从LinkedList中获取指定位置的元素。

qq_62674859的博客 597

jdk文档中文版

java开发中必须的jdk文档,中文翻译,方便新手查阅学习

jdk1.8 API 帮助文档 中文

下载后,如果右侧不显示,右击选择文档属性,修改-解除限制(如有侵犯,请联系我删除,谢谢)

Java集合框架中LinkedList的常见使用

在本文中,我们详细介绍了Java集合框架中LinkedList的常见方法。通过学习这些方法,我们可以更好地理解和使用LinkedList类来存储和操作数据。

2302_77874940的博客 599

JDK中文手册(JAVA).rar

JDK中文手册(JAVA),JDK API手册

LinkedList 的创建与使用

1.LinkedList 的创建 //创建一个 LinkedList 链表结构 LinkedList list = new LinkedList(); 2.LinkedList 的添加操作 //追加尾部 list.add("java01"); //添加到头部 list.addFirst("java02"); //添加到尾部 list.addLast("java03"); //添加到指定下标 list.add(2,19); 3.

weixin_56162501的博客 1453

jaka+realsense+aruco+手眼标定(python)

第二次重建了项目的手眼标定部分……有很多第一次记录遗漏的地方,在此补充。

drivenzyw的博客 2123

数字后端实战指南 | Innovus Function ECO全流程解析(从LAB到Tapeout)

本文深入解析了在Cadence Innovus工具中进行Function ECO的全流程实战指南。从LAB环境搭建到Tapeout前的签核验证,详细拆解了Pre-mask与Post-mask ECO的核心步骤、关键命令(如ecoDesign)以及常见避坑方案。重点阐述了如何应对时序、DRC等挑战,并强调了备用单元管理与严格验证的重要性,是数字后端工程师提升综合能力的必备参考。

weixin_28452161的博客 644

JAVA-集合类之LinkedList类底层源码解析--创建、添加和删除

JAVA-集合类之LinkedList类底层源码解析

qq_42393626的博客 695

Python实战:超分辨率图像质量评估全攻略——PSNR、SSIM、LPIPS与NIQE的代码实现与优化

本文详细介绍了在Python中实现超分辨率图像质量评估的完整方案,涵盖PSNR、SSIM、LPIPS和NIQE四大核心指标。通过模块化代码设计、多进程并行处理和GPU加速优化,帮助开发者构建高效、可扩展的评估系统,并提供了实战避坑指南与结果解读方法。

weixin_29053073的博客 477

【Java集合类】之 LinkedList(链表)

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在..

鱼干的博客 5272

沐数科技数据开发岗笔试题2025

与数据库中的主键(Primary Key)​有所不同,业务主键(Business Key)​是业务层面的唯一标识,通常由业务规则决定,例如,订单号、订单明细号,身份证号等。用户授信表(table_credit):包含用户ID(uid)、授信申请时间(credit_submit_time_local)、授信状态(credit_status)。:在正态分布中,大约68%的数据值落在距离均值一个标准差的范围内,约95%的数据值落在两个标准差的范围内,而约99.7%的数据值落在三个标准差的范围内。

weixin_40121264的博客 3527

【unity游戏开发之InputSystem——01】通过写代码监听InputSystem输入(基于unity6开发介绍)

通过写代码监听InputSystem输入(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4893

LinkedList集合深度解析

上文讲解了ArrayList的底层实现原理,感兴趣的小伙伴可以去看下,本文重点讨论LinkedList集合。 首先说下ArrayList和LinkedList的区别:(相同点都是有序的~) ①ArrayList底层数据结构是动态数组,LinkedList底层数据结构是双向链表。 ② 查询或者修改的时候,ArrayList比LinkedList的效率更高,因为LinkedList是线性的基...

AkiraNicky的博客 9459

将物理信息神经网络(PINN)应用于微通道湍流的拓扑优化,并结合COMSOL数据进行训练与快速预测

本文提出一种基于物理信息神经网络(PINN)的微通道散热器流场快速预测方法。通过有限组COMSOL仿真数据训练神经网络,结合Navier-Stokes方程和能量方程作为物理约束,构建可快速预测新拓扑结构下速度场和温度场的替代模型。该方法包含数据准备、网络构建、损失函数设计等关键步骤,利用自动微分计算方程残差,显著降低传统CFD优化的计算成本,实现秒级/分钟级的流场预测,为微通道散热器拓扑优化提供高效解决方案。

huanghm88的专栏 536

27、Java高级特性——集合、ArrayList集合、LinkedList集合、List接口、ArrayList和LinkedList的区别

集合基础 1、数组的缺陷 2、集合的概述 3、集合类的特点 二、ArrayList集合类 1、ArrayList集合类的用法 2、ArrayList类中常用方法 三、ArrayList集合代码演示 1、封装属性类 2、创建集合操作类 3、添加数据:add() 4、获取集合元素个数:size() 5、获取集合中指定下标的元素:get() 6、 判断集合中是否包含某个元素:contains() 7、删除集合中的元素:remove(元素)/remove(元素下标) 8、判断集合是

优快云_Loveletter的博客 769

【气候模式降尺度】分位数增量映射(QDM)原理及MATLAB代码实现

简介QDM原理及其MATLAB代码实现

WW、forever的博客 5865

【一 扣子客户案例合集】【 1.1 抖音电商:通过扣子智能体重塑电商服务新体验】

**摘要:**抖音电商借助扣子(Coze)智能体平台重塑客服体验,通过无代码开发、多模态交互和跨平台发布等功能,解决了传统客服高峰期压力大、成本高及响应机械等痛点。智能体采用直接面客与人工监管结合模式,实现高效精准服务,并通过解构流程、模块化设计优化系统架构。其技术优势包括零配置学习、意图识别、情绪感知等,实际应用中显著提升客服效率300%以上,改善用户体验。未来将进一步拓展至商品推荐、直播互动等场景,推动电商服务智能化升级。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1571

(集合) List集合LinkedList

LinkedList: * 底层数据结构是链表,查询慢,增删快 * 线程不安全,效率高 LinkedList的特有功能: * A:添加功能 * public void addFirst(Object e) * public void addLast(Object ...

Scoson 343

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java面试总结(一)java面向对象、arraylist与linkedlist区别、高并发中的集合问题、JDK1.8新特性

目录 一、java面向对象有哪些特征 二、ArrayList和LinkedList有什么区别 三、高并发中的集合有哪些问题 四、JDK1.8中的新特性 一、java面向对象有哪些特征 返回顶部目录 封装、继承、多态 面向对象编程是利用类和对象编程的一种思想。万物可归类,类是对于世界事物的高度抽象,不同的事物之间有不同的关系,一个类自身与外界的封装关系。一个父类和子类的继承关系。一个类和多个类的多态关系。万物皆对象,对象是具体的世界事物,面向对象的三大特征封装,继承,多态..

qq_44969643的博客 2150

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

一文读懂,java list集合详解及arraylist,linkedlist集合底层源码分析

Collection集合概述是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现创建Collection集合的对象多态的方式具体的实现类ArrayListCollection集合常用方法方法名说明添加元素从集合中移除指定的元素根据条件进行移除清空集合中的元素判断集合中是否存在指定的元素判断集合是否为空集合的长度,也就是集合中元素的个数List集合的概述。

m0_58975186的博客 1004

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java基础_模拟LinkedList集合

package com.lic.linkedList; public class MyLinkedList<E> { private class Node { Object data; // 该节点存放的数据 Node prev; // 该节点的上一个节点地址 Node next; // 该节点的下一个节点地址 } // 该集合中存储节点的数量 private ...

AN_ERA的博客 237

集合(List、Set、Map)ArrayList、LinkedList、Vector、HashSet、LinkedHashSet、HashMap

当创建ArrayList对象时,如果使用的是无参构造器,则elementDate初始容量为0,第一添加时,会扩容到10,再次扩容时elementDate容量会扩容到10*1.5=15,以此类推;扩容机制:创建Vector对象时,如果使用的是无参构造器,则elementDate初始容量为10,如果需要扩容时,会扩容到2倍,以此类推;如果使用的是有参构造器,则elementDate的初始容量为指定的大小,如果需要扩容时,则直接扩容为2倍,以此类推;以后再扩容,table和临界值都扩大两倍32和24,以此类推;

weixin_63172268的博客 1867
上一篇: 深入理解ArrayList集合内部原理并自主封装代码实现ArrayList集合功能
下一篇: 利用反射技术在泛型String集合中存入Integer元素
Java小柴
博客等级 码龄8年 46粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值