码迷,mamicode.com
首页 > 其他好文 > 详细

LinkedList底层源码实现

时间:2018-06-02 20:02:44      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:trace   try   分配   public   nts   时间   code   插入   null   

/**
 * Created by chengbx on 2018/5/18.
 * LinkedList其实也就是我们在数据结构中的链表,这种数据结构有这样的特性:
 * 分配内存空间不是必须是连续的;
 * 插入、删除操作很快,只要修改前后指针就OK了,时间复杂度为O(1);
 * 访问比较慢,必须得从第一个元素开始遍历,时间复杂度为O(n);
 */
public class CbxLinkedList {
    private Node first;
    private Node last;
    private int size;

    public void add(Object object){
        //如果是第一个节点 那么在创建之后 第一个节点 也是最后一个节点
        Node n = new Node();
        if(first == null){
            n.setPrevious(null);
            n.setObject(object);
            n.setNext(null);
            first = n;
            last = n;
        }else{
            //直接往last后面添加新的节点
            n.setPrevious(last);
            n.setObject(object);
            n.setNext(null);
            //新增的节点为最后一个节点
            last.setNext(n);
            last = n;
        }
        size++;
    }
    public Object get(int index){
        RangeCheck(index);
        Node temp = getNodeByindex(index);
        return temp.getObject();
    }
    public int size(){
        return size;
    }

    private void RangeCheck(int index){
        if(index >= size){
            try {
                throw new Exception();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public Node getNodeByindex(int index){
        Node temp = null;
        if(first!=null){
            temp = first;
            for(int i =0;i<index;i++){
                temp = temp.getNext();
            }
        }
        return temp;
    }
    public void remove(int index){
        Node temp = getNodeByindex(index);
        Node preNode = temp.getPrevious();
        Node nextNode = temp.getNext();
        preNode.setNext(nextNode);
        nextNode.setPrevious(preNode);
        size--;
    }
    public void add(int index,Object object){
        //获取对应索引的节点
        Node temp = getNodeByindex(index);
        if(temp!=null){
            Node preNode = temp.getPrevious();

            Node newNode = new Node();
            newNode.setPrevious(preNode);
            newNode.setObject(object);
            newNode.setNext(temp);

            preNode.setNext(newNode);
            temp.setPrevious(newNode);
        }
        size++;
    }

    @Test
    public void test(){
        CbxLinkedList cbxLinkedList = new CbxLinkedList();
        cbxLinkedList.add("aaa");
    }

}
class Node{
    private Node previous;
    private Object object;
    private Node 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;
    }

    public Node() {
    }

    public Node(Node previous, Object object, Node next) {
        this.previous = previous;
        this.object = object;
        this.next = next;
    }
}

 

LinkedList底层源码实现

标签:trace   try   分配   public   nts   时间   code   插入   null   

原文地址:https://www.cnblogs.com/cbxBlog/p/9126332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!