java集合单向链表_Java实现单向链表数据结构
本文章同步到本人的博客站点 燕归来
链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。下面对单向链表做一个介绍。
什么是单向链表?
单向链表是一种线性表,实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。其数据在内存中存储是不连续的,它存储的数据分散在内存中,每个结点只能也只有它能知道下一个结点的存储位置。由N各节点(Node)组成单向链表,每一个Node记录本Node的数据及下一个Node。向外暴露的只有一个头节点(Head),我们对链表的所有操作,都是直接或者间接地通过其头节点来进行的。
image
单向链表的代码实现
链表的过程这里不做过多的赘述,下面我们看一下使用Java实现简单的单向链表:
package com.tao.struct.list;
/** @author 周涛 */
public class LinkList {
private Node head;
private Node rear;
private Node point;
private int length;
//内部私有类
private class Node {
private T object;
private Node next;
public Node() {
object = null;
}
public Node(T object) {
this.object = object;
}
public Node(T object, Node next) {
this.object = object;
this.next = next;
}
}
public LinkList() {
head = new Node();
rear = head;
length = 0;
}
public void add(T o) {
point = new Node(o);
rear.next = point;
rear = point;
length++;
}
/**
* 在链表尾部新增数据
*
* @param index
* @param o
*/
public void add(int index, T o) {
if (index > length) {
throw new IllegalArgumentException();
}
// 移动Point到指定位置
movePoint(index);
Node tmp = new Node(o);
tmp.next = point.next;
point.next = tmp;
length++;
}
/**
* 将point指针移到index位置
*
* @param index
*/
private void movePoint(int index) {
point = head;
while (point.next != null) {
if (index == 0) {
break;
}
index--;
point = point.next;
}
}
/** 删除链表所有数据 */
public void clear() {
head = null;
length = 0;
rear = head;
System.gc();
}
/**
* 获取指定位置的数据
*
* @param index
* @return
*/
public T get(int index) {
movePoint(index);
return point.next.object;
}
/**
* 判断链表是不是空的
*
* @return
*/
public boolean isEmpty() {
return length == 0;
}
/**
* 移除指定位置的数据
*
* @param index
*/
public void remove(int index) {
movePoint(index);
point.next = point.next.next;
length --;
}
/**
* 获取链表的长度信息
*
* @return
*/
public int size() {
return length;
}
/**
* 更新指定位置的数据
*
* @param index
* @param o
*/
public void set(int index, T o) {
movePoint(index);
point.next.object = o;
}
/** 遍历输出链表的数据 */
public void traverse() {
point = head;
if (point != null) {
while (point.next != null) {
System.out.print(point.next.object + "\t");
point = point.next;
}
}
System.out.println();
}
}
测试代码
注意,此测试依赖JUnit4单元测试框架
package com.tao.struct.list;
import junit.framework.TestCase;
/**
* @author 周涛
*/
public class LinkListTest extends TestCase {
public void testAdd() {
LinkList linkList=new LinkList();
//测试在尾部新增数据
for(int i=0;i<10;i++){
linkList.add(String.valueOf(i));
}
// 遍历输出链表
System.out.print("数据信息为:");
linkList.traverse();
//测试在指定位置插入数据
linkList.add(3,"*");
System.out.print("插入新的数据后:");
linkList.traverse();
//获取指定位置的数据
String s = linkList.get(3);
System.out.println("获取第3位置的数据是:"+s);
//移除指定位置的数据
linkList.remove(3);
System.out.print("移除第3位置的数据后:");
linkList.traverse();
//更新指定位置数据后
linkList.set(3,"333");
System.out.print("更新指定位置数据后");
linkList.traverse();
// 判断链表是不是空的
System.out.println("当前链表长度:" + linkList.size());
System.out.println("当前链表是否为空:" + linkList.isEmpty());
linkList.clear();
System.out.println("清空链表后是否为空:" + linkList.isEmpty());
}
}
测试结果
image
java集合单向链表_Java实现单向链表数据结构相关推荐
- 关于java集合的知识点_java中集合的知识点
1.JAVA中集合都存放在java.util包中 2.JAVA集合中主要分为三种类型:Set,List,Map.我写的这篇文章主要是对Set和List的理解 3.Collection是最基本的集合接口 ...
- java集合框架介绍_Java集合框架介绍
Java集合框架介绍 发布时间:2020-06-26 17:00:14 来源:亿速云 阅读:85 作者:Leah 这篇文章将为大家详细讲解有关Java集合框架介绍,文章内容质量较高,因此小编分享给大家 ...
- java集合框架类_Java集合框架总结—超详细-适合面试
Set和List接口是Collection接口派生的两个子接口,Queue是Java提供的队列实现,类似于List. Map实现类用于保存具有映射关系的数据(key-value). 2.Set.Lis ...
- java 集合与泛型_java的集合和泛型的知识点归纳1
[Collection.泛型] 主要内容 Collection集合 迭代器 增强for 泛型 教学目标 [ ] 能够说出集合与数组的区别 [ ] 说出Collection集合的常用功能 [ ] 能够使 ...
- java集合的遍历_java集合遍历方法总结
java集合遍历方法总结 一.for循环遍历集合 使用条件: ①能否确定集合中的元素个数 ②集合是否可以通过整数索引值来精确位置 public static void forTraversal(){ ...
- java 反转jia链表_Java实现单链表反转
本文主要介绍单链表反转的两种方法,记录如下: 1. package com.leetcode; public class ListReverse { public static void main(S ...
- java集合对象声明_Java基础————集合类
原标题:Java基础----集合类 理解集合类 集合类存放于java.util包中. 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(refere ...
- java 集合 总结 表_java 列表与集合总结
列表与集合 (一切输出都用for each!丢弃迭代器) 列表List 1顺序表 Arraylist 适用于静态查找 2 链式双向表 Linkedlist 适用于增删该查 3 (容器) Vect ...
- java 集合自定义元素_java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。...
import java.util.*;/*将自定义对象作为元素存到ArrayList集合中,并去除重复元素. 比如:存人对象.同姓名同年龄,视为同一个人.为重复元素. 思路: 1,对人描述,将数据封装 ...
最新文章
- USB、TTL电平、232电平之间的相互转换
- ES6箭头函数和模板字符串
- 配置静态路由下一跳为本地出战接口和IP地址的区别
- Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令
- python子进程修改父进程内变量_如何将父变量传递给python中的子进程?
- 沈航计算机考研上岸,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
- 良心推荐:高品质音乐播放器Audirvana for Mac
- 信息学奥赛一本通(1234:2011)
- html radio 更换图片,html修改radio、checkbox样式
- 《Unity3D脚本编程与游戏开发》学习Day one
- exoplay切换全屏_基于exoPlayer 拓展自定义播放器
- 索尼相机手机控制对焦,操控指南丨 使用索尼微单的十个小技巧
- 超分辨重建-Bicubic双三次线性插值opencv实现
- matlab画进化树分析图,教你用ggtree绘制高颜值进化树
- Method of Four Russians 算法
- Tensorflow Serving初体验
- windows安装Oracle12 (服务端+客户端)
- Ubuntu 安装源及初始配置
- 检索 国家自然科学基金
- 什么是自动气象站 校园气象站
热门文章
- 显示mysql建表语句_mysql 显示建表语句
- 算法:三数之和(js)
- 【论文详解】DPED:DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks
- foxmail服务器上保留邮件,如果Foxmail中只保留了Mails文件夹,我的邮件还能恢复吗?...
- 运动状态最佳心率计算器 (Target-Heart-Rate Calculator)
- 手机APP兼容性测试
- 程序员面试金典适合java么,程序员面试金典(java版)
- (C++的对话)Solmyr 的小品文系列之二:模棱两可的陷阱
- 【Qt学习】 OpenCV美图特效
- 欢乐球球脚本 python_Unity 欢乐球球