javaSE基础之 LinkedList的底层简单实现
这里贴上LinkedList底层的简单实现
package com.yck.mylinkedlist;
public class Node
{
private Node previous; //上一结点
private Object object; //本结点所存储的东西
private Node next; //下一个结点
public Node(){}
public Node(Node previous, Object object, Node next)
{
super();
this.previous = previous;
this.object = object;
this.next = next;
}
public Node getPrevious()
{
return previous;
}
public void setPrevious(Node previous)
{
this.previous = previous;
}
public Object getObject()
{
return object;
}
public void setObject(Object object)
{
this.object = object;
}
public Node getNext()
{
return next;
}
public void setNext(Node next)
{
this.next = next;
}
}
package com.yck.mylinkedlist;
/**
* 手动实现LinkedList底层,这次用了泛型
* @author Administrator
*
* @param <T>
*/
public class MyLinkedList<T>
{
private Node first;
private Node last;
private int size;
public MyLinkedList(){}
public void add(T t)
{
Node n =new Node();
if(first == null)
{
n.setPrevious(null);
n.setObject(t);
n.setNext(null);
first = n;
last = n;
size++;
}
else
{
n.setPrevious(last);
n.setObject(t);
n.setNext(null);
last.setNext(n);
last = n;
size++;
}
}
public void add(int index,T t)
{
rangCheck(index);
Node temp = new Node();
if(index == 0)
{
temp.setPrevious(null);
temp.setObject(t);
temp.setNext(first);
first = temp;
}
else if(index != size)
{
temp.setPrevious(getNode(index-1));
temp.setObject(t);
temp.setNext(getNode(index));
getNode(index-1).setNext(temp);
getNode(index).setPrevious(temp);
}
else
{
temp.setPrevious(last);
temp.setObject(t);
temp.setNext(null);
last = temp;
}
size++;
}
public void add(MyLinkedList<T> list)
{
Node temp = new Node();
temp = list.first;
temp.setPrevious(this.last);
this.last.setNext(temp);
this.last = list.last;
this.size += list.size;
list.first.setPrevious(null);
}
public void remove(int index)
{
getNode(index - 1).setNext(getNode(index+1));;
getNode(index).setPrevious(getNode(index -1));
size--;
}
public Node getNode(int index)
{
rangCheck(index);
Node temp = new Node();
temp=first;
for(int i=0;i<index;i++)
{
temp=temp.getNext();
}
return temp;
}
public Object get(int index)
{
return getNode(index).getObject();
}
public void rangCheck(int index)
{
if(index<0 || index>=this.size)
try
{
throw new Exception();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args)
{
MyLinkedList<String> list = new MyLinkedList<String>();
list.add("aaa");
list.add("ooo");
list.add("xxx");
list.add("fff");
for(int i=0;i<list.size;i++)
System.out.println(list.get(i));
System.out.println("****************");
list.remove(2);
for(int i=0;i<list.size;i++)
System.out.println(list.get(i));
System.out.println("****************");
MyLinkedList<String> list1 = new MyLinkedList<String>();
list1.add("I");
list1.add("love");
list1.add("u");
System.out.println(list1.first.getPrevious());
System.out.println("****************");
for(int i=0;i<list1.size;i++)
System.out.println((String)list1.get(i));
System.out.println("****************");
list.add(list1);
for(int i=0;i<list.size;i++)
System.out.println((String)list.get(i));
System.out.println("****************");
}
}
差点忘记贴上面简单测试的结果了

javaSE基础之 LinkedList的底层简单实现的更多相关文章
- javaSE基础之 ArrayList的底层简单实现
最近就是想扒一扒存在硬盘里面的学习资料(突然想到什么),把以前写过的一些东西整理一下分享出来. 这边是ArrayList 的简单实现,当然只实现了部分方法 package com.yck.collec ...
- javase基础回顾(二)LinkedList需要注意的知识点 阅读源码收获
我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们 ...
- 基础1 JavaSe基础
JavaSe基础 1. 九种基本数据类型的大小,以及他们的封装类 boolean 无明确指定 Boolean char 16bits Character byte 8bits Byte short 1 ...
- java学习之路之javaSE基础1
<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...
- JavaSE基础:集合类
JavaSE基础:集合类 简单认识类集 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. 而要向存储多个对象,就不能是 ...
- javaSE基础07
javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...
- javaSE基础06
javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...
- javase基础复习攻略《二》
今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言 ...
- java学习之路之javaSE基础2
java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...
随机推荐
- SpringMVC配置实例
一.SpringMVC概述 MVCII模式实现的框架技术 Model--业务模型(Biz,Dao...) View--jsp及相关的jquery框架技术(easyui) Contraller--Dis ...
- Jmeter使用代理服务器录制脚本
Mark一下Jmeter使用代理服务器录制脚本,以备自己可以翻阅,也可以帮助其他人了解一下Jmeter的这个功能.其实录制脚本只是在我们工作中的一个小插曲而已,只是为了能快速看到应用程序跑的逻辑及实现 ...
- (转载)Windows 上搭建Apache FtpServer
因工作需要,最近经常接触到FTP,今天我来介绍一个开源的FTP服务器,那就是Apache FTPServer,Apache FTPServer是一个100%纯Java的FTP服务器. 它的设计是基于现 ...
- Oracle 11g RAC 修改各类IP地址
Oracle 11g RAC 修改各类IP地址 首先,我们都知道Oracle 11g RAC中的IP主要有:Public IP.VIP.SCAN VIP.Private IP这几种. 一般这类改IP地 ...
- 确认oracle数据库错误日志文件位置
在命令行里面输入: show parameter background_dump_dest 执行之后会显示一个目录,这个目录就是错误日志目录 在这目录下回有alert*.log 类似这样的文件,这个 ...
- git bash命令行使用https协议方式进行克隆和提交到github服务器
在本地创建一个文件夹来存放远程服务器仓库:如创建一个git8文件夹: 在命令行中,使用git clone https://github.com/serverking/weixin.git进行克隆git ...
- golang 之验证码api
知识一:如何返回一个json数据? 先定义一个结构体ResponseData,2个参数,并返回的是json数据,key就是json后定义的名称 type ResponseData struct { S ...
- 小兴趣:用python生成excel格式座位表
脚本分两个文件: 1.生成二维随机列表:GenerateLocaltion.py 2.将列表导入excel文件:CreateExcel.py 先上GenerateLocaltion.py: impor ...
- Asp.net中,从弹出窗体取选择值(转)
在Asp.net中,从A页面中弹出B页面,在B页面中选择数据后,关闭并将数据更新到A页面,是一种常用 的方式.只是我对Javascript不熟悉,所以捣鼓了一下午,终于有了一点成绩:测试项目有两个页面 ...
- Lucene搜索引擎+HDFS+MR完成垂直搜索
介于上一篇的java实现网络爬虫基础之上,这一篇的思想是将网络收集的数据保存到HDFS和数据库(Mysql)中:然后用MR对HDFS的数据进行索引处理,处理成倒排索引:搜索时先用HDFS建立好的索引来 ...