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 ...
随机推荐
- linux+windows mysql导入导出sql文件
linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql# ...
- [luogu P3801] 红色的幻想乡 [线段树][树状数组]
题目背景 蕾米莉亚的红雾异变失败后,很不甘心. 题目描述 经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放. 我们将幻想乡看做是一个n*m的方格地区,一 ...
- 【HTML】ie=edge(转)
< meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" /> 这是个是 ...
- 一.CPU,Mem过高怎么办 --这是个开始
本身是名Java开发,在做了一段大数据的工作后,猛然间想对Java做个总结. 从未写过技术博客,一时不知如何开始,思虑后,暂且以自己喜爱的方式来开篇. 工作中遇到过CPU或内存过高的问题,解决步骤: ...
- CentOS服务器运维监控Nagios(一)
CentOS下搭建Nagios 王尚 2014.11.09 操作系统:CentOS-6.5-i386-bin-DVD1.iso 安装在VM中进行测试的. 本章需要的软件链接: php-5.3.2.ta ...
- 一篇关于Python装饰器的博文
这是一篇关于python装饰器的博文 在学习python的过程中处处受阻,之前的学习中Python的装饰器学习了好几遍也没能真正的弄懂.这一次抓住视频猛啃了一波,就连python大佬讲解装饰器起来也需 ...
- Maven的下载和安装
1. Maven作用: 管理项目和jar包 2. jdk环境要求: maven3.3+需要jdk1.7以上的版本 3. 下载地址: http://maven.apache.org/download.c ...
- java多线程系列(五)---synchronized ReentrantLock volatile Atomic 原理分析
java多线程系列(五)---synchronized ReentrantLock volatile Atomic 原理分析 前言:如有不正确的地方,还望指正. 目录 认识cpu.核心与线程 java ...
- CSS2--字体样式
## CSS2 字体样式 ##### font-family 字体族 - 规定元素的字体系列 - 把多个字体作为一个"回退"系统保存.保证浏览器的支持 - ````Microsof ...
- 网站pv统计脚本
在平时的运维工作中,我们运维人员需要清楚自己网站每天的总访问量.总带宽.ip统计和url统计等.虽然网站已经在服务商那里做了CDN加速,所以网站流量压力都在前方CDN层了像每日PV,带宽,ip统计等数 ...