这里贴上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的底层简单实现的更多相关文章

  1. javaSE基础之 ArrayList的底层简单实现

    最近就是想扒一扒存在硬盘里面的学习资料(突然想到什么),把以前写过的一些东西整理一下分享出来. 这边是ArrayList 的简单实现,当然只实现了部分方法 package com.yck.collec ...

  2. javase基础回顾(二)LinkedList需要注意的知识点 阅读源码收获

    我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们 ...

  3. 基础1 JavaSe基础

    JavaSe基础 1. 九种基本数据类型的大小,以及他们的封装类 boolean 无明确指定 Boolean char 16bits Character byte 8bits Byte short 1 ...

  4. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...

  5. JavaSE基础:集合类

    JavaSE基础:集合类 简单认识类集 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. 而要向存储多个对象,就不能是 ...

  6. javaSE基础07

    javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...

  7. javaSE基础06

    javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...

  8. javase基础复习攻略《二》

    今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言 ...

  9. java学习之路之javaSE基础2

    java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...

随机推荐

  1. vue.js移动端app实战1:初始配置

    本系列将会用vue.js2制作一个移动端的webapp单页面,页面不多,大概在7,8个左右,不过麻雀虽小,五脏俱全,常用的效果如轮播图,下拉刷新,上拉加载,图片懒加载都会用到.css方面也会有一些描述 ...

  2. cordova plugin汇总大全

    1.获取当前应用的版本号 cordova plugin add cordova-plugin-app-version 2.获取网络连接信息 cordova plugin add cordova-plu ...

  3. ubuntu上安装apache2+mysql+php5-fpm(PHP5 - FastCGI Process Manager)

    1: 安装mysql apt-get install mysql-server mysql-client 安装过程中会被问到设置mysql root的密码     New password for t ...

  4. python函数(6):内置函数和匿名函数

    我们学了这么多关于函数的知识基本都是自己定义自己使用,那么我们之前用的一些函数并不是我们自己定义的比如说print(),len(),type()等等,它们是哪来的呢? 一.内置函数 由python内部 ...

  5. MySQL日期、时间相关内容

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  6. C#设计模式(0)-认识设计模式

    简介 世界上本没有路,走的人多了也就成了路:世界上本来没有设计模式.用的人多了,也就成了设计模式.所以,我们不是严格按照它的定义去执行,可以根据自己的实际场景.需求去变通.领悟了其中的思想,实现属于自 ...

  7. 最短路之Bellman-Ford算法

    说明: Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的. 这时候,就需要使用其他的算法 ...

  8. 庖丁解牛——CY7C68013A开发框架

    大家好,好久不见了,距离上次发文章都有两个多星期了,非常高兴同时也非常感谢你们能一直关注我.之前在公众号上收到网友的消息,其大概意思就是问我能不能出点USB干货,为此我就把第二篇--解密USB2.0数 ...

  9. oAuth 认证

    这段时间公司开发项目用到oAuth2协议,现在做一下梳理. CORS即Cross Origin Resouce Share,跨域资源共享:是W3C为防止脚本攻击,而制定的安全标准之一,它云溪浏览器向跨 ...

  10. IIS7.5应用程序池集成模式和经典模式的区别介绍

    IIS7.5应用程序池集成模式和经典模式的区别介绍 作者:  字体:[增加 减小] 类型:转载 时间:2012-08-07   由于最近公司服务器上需要将iis的应用程序池全部都升级到4.0的框架,当 ...