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,对人描述,将数据封装 ...
最新文章
- UGUI的优点新UI系统四 开源
- 为什么jsp写script代码报错_JSP 报错:ReferenceError: $ is not defined
- Python 的文件IO相关操作说明
- Wannafly挑战赛22 B	字符路径 ( 拓扑排序+dp )
- 【视觉项目】【day2】8.21号实验记录(手机固定高度15cm拍摄+直方图均衡化+模板匹配,模板12个,测试28个,效果十分差)
- UWP开发细节记录:判断文件类型
- Linux之深入理解anaconda使用
- Javascript当中的RSA加解密
- 《Tableau数据可视化实战》——1.3节连接Excel文件
- emqx_auth_mysql报错_EMQ插件组合实现物联网边缘平台的设备通信管理
- Reflector for .NET 下载问题
- 武汉好地科技为您解析CMMI3和CMMI5的区别
- Hessian matrix黑塞矩阵(海森矩阵)和雅克比矩阵Jacobian matrix
- 【Java 8 新特性】Java LocalDate 详解
- Keras机器翻译实战
- 计算机英语四六级考试时间,2019年12月英语四六级考试时间
- ios html5不显示图片,为什么iOS上的Safari不显示我的HTML5视频海报?
- 【RFC6405 IP 电话 (VoIP) SIP 对等互连用例 VoIP SIP Peering Use Cases】(翻译)
- 【深度学习】Pytorch实现CIFAR10图像分类任务测试集准确率达95%
- 理解事务四大特性(Transaction)——原子性、一致性、隔离性和持久性(ACID)