Java手写简单Linkedlist一(包括增加,查找,toString功能)
时间:2019-09-19
本文章向大家介绍Java手写简单Linkedlist一(包括增加,查找,toString功能),主要包括Java手写简单Linkedlist一(包括增加,查找,toString功能)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
@Java300 学习总结
一、自定义节点
LinkList底层为双向链表。特点为查询效率低,但增删效率高,线程不安全。
链表数据储存在节点,且每个节点有指向上个和下个节点的指针。
创建ggLinkedList类,可以先创建一个节点对象Entry。
public class Entry {
Entry previous;
Entry next;
Object element;
public Entry(Entry previous, Entry next, Object element) {
super();
this.previous = previous;
this.next = next;
this.element = element;
}
public Entry(Object element) {
super();
this.element = element;
}
}
二、增加add方法
LinkedList通过add方法往里面增加元素。
先建一个类。
public class ggLinkedList {
private Entry first; //链表头指针,指向第一个节点
private Entry last; //链表尾指针,指向最后一个节点
private int size; //长度,增加节点和删除节点时++或--
//往链表尾处添加元素
public void add(Object obj) {
Entry entry = new Entry(obj);
if(first == null) {
first = entry;
last = entry;
}else {
entry.previous = last; //新节点头指针指向上一个节点
entry.next = null; //新节点尾指针指向空
last.next = entry; //上一个节点的尾指针指向新添加节点
last = entry;//尾指针指向新节点
}
size++;//链表长度增加一
}
public static void main(String[] args) {
ggLinkedList list = new ggLinkedList();
list.add('a');
}
}
三、增加toString方法
在ggLinkedList类中,添加toString方法,以数组的形式输出链表每个节点的数据。
在main函数调用System.out.println(list),会默认调用toString方法。
public String toString() {
StringBuilder sb = new StringBuilder("[");
Entry temp = first;
while(temp!=null) {
sb.append(temp.element+",");
temp = temp.next;
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
四、增加get查找方法
get()方法,可以通过传递数字,查找LinkedList对应索引节点上的数据。
public Object get(int index) {
if(index< 0||index > size -1) {
throw new RuntimeException("索引数字不合法" + index);
}
if(index <= (size>>1)) { //索引index小于链表长度的一半,从链表头部开始查找
Entry temp = first;
for(int i = 0;i<index;i++) {
temp = temp.next;
}
return temp.element;
}else
{
Entry temp = last; //索引index大于链表长度的一半,从链表尾部开始查找
for(int i = size-1;i > index;i--) {
temp = temp.previous;
}
return temp.element;
}
}
原文地址:https://www.cnblogs.com/gg12138/p/11550267.html
- HDU 2503 a/b + c/d(最大公约数与最小公倍数,板子题)
- python接口自动化6-重定向(Location)
- 2017广东工业大学程序设计竞赛初赛 题解&源码(A,水 B,数学 C,二分 D,枚举 E,dp F,思维题 G,字符串处理 H,枚举)
- python接口自动化7-参数关联
- 深度学习GPU环境Ubuntu16.04+GTX1080+CUDA9+cuDNN7+TensorFlow1.6环境配置
- python接口自动化8-参数化
- HDU 2037 今年暑假不AC(贪心,区间更新,板子题)
- “玲珑杯”ACM比赛 Round #13 题解&源码
- 回溯算法入门及经典案例剖析(初学者必备宝典)
- Selenium2+python自动化66-装饰器之运行失败截图
- 51Nod 1091 线段的重叠(贪心+区间相关,板子题)
- 51Nod 1016 水仙花数 V2(组合数学,枚举打表法)
- Selenium2+python自动化67-用例失败自动截图
- Codeforces Round #404 (Div. 2)(A.水,暴力,B,排序,贪心)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释