第二篇 集合与容器(二)

第一版

package com.zzp.demo.myCollection;

public class Node {
    
    Node previous; //上一节点
    Node next; //下一节点
    Object element; //数据
    
    public Node(Object element) {
        super();
        this.element = element;
    }

    public Node(Node previous, Node next, Object element) {
        super();
        this.previous = previous;
        this.next = next;
        this.element = element;
    }
}
package com.zzp.demo.myCollection;
/**
 * 
 * 自定义链表
 * @author java
 *
 */
public class LinkedList01 {
    private Node first;
    private Node last;
    private int size;
    
    //添加元素
    public void add(Object obj){
        Node node = new Node(obj);
        if(first == null){
            first = node;
            last = node;
        }else{
            node.previous = last;
            node.next = null;
            last.next = node;
            last = node;
        }
    }
    
    //打印字符串
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        Node temp = first;
        while(temp != null){
            sb.append(temp.element + ",");
            temp = temp.next;
        }
        sb.setCharAt(sb.length() - 1, ']');
        return sb.toString();
    }
    
    public static void main(String[] args) {
        LinkedList01 ls = new LinkedList01();
        ls.add("sa");
        ls.add("sdsf");
        ls.add("kajs");
        System.out.println(ls.toString());
    }
}

 第二版

package com.zzp.demo.myCollection;
/**
 * 
 * 自定义链表
 * 增加get方法
 * @author java
 *
 */
public class LinkedList02 {
    private Node first;
    private Node last;
    private int size;
    
    public Object get(int index){
        
        if(index < 0 || index > size - 1){
            throw new RuntimeException("索引不合法"+index);
        }
        
        Node temp = null;
        
        if(index < (size >> 1)){
            temp = first;
            for(int i =0;i<index;i++){
                temp = temp.next;
            }
        }else{
            temp = last;
            for(int i=size-1;i>index;i--){
                temp = temp.previous;
            }
        }    
        return temp.element;
    }
    
    //添加元素
    public void add(Object obj){
        Node node = new Node(obj);
        if(first == null){
            first = node;
            last = node;
        }else{
            node.previous = last;
            node.next = null;
            last.next = node;
            last = node;
        }
        size++;
    }
    
    //打印字符串
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        Node temp = first;
        while(temp != null){
            sb.append(temp.element + ",");
            temp = temp.next;
        }
        sb.setCharAt(sb.length() - 1, ']');
        return sb.toString();
    }
    
    public static void main(String[] args) {
        LinkedList02 ls = new LinkedList02();
        ls.add("sa");
        ls.add("sdsf");
        ls.add("kajs");
        ls.add("sajd");
        ls.add("sdsfgf");
        ls.add("kajsds");
        System.out.println(ls.size);
        System.out.println(ls.get(3));
    }
}

 第三版

package com.zzp.demo.myCollection;
/**
 * 
 * 自定义链表
 * 增加remove方法
 * @author java
 *
 */
public class LinkedList03 {
    private Node first;
    private Node last;
    private int size;
    
    public Object get(int index){
        
        if(index < 0 || index > size - 1){
            throw new RuntimeException("索引不合法"+index);
        }
        
        Node temp = getNode(index);
        
        return temp != null ? temp.element : null;
    }
    
    public void remove(int index){
        Node temp = getNode(index);
        if(temp != null){
            Node up = temp.previous;
            Node down = temp.next;
            if(up != null){
                up.next = down;
            }
            if(down != null){
                down.previous = up;
            }
            if(index == 0){
                first = down;
            }
            if(index == size - 1){
                last = up;
            }
            size--;
        }
    }
    
    public Node getNode(int index){
        Node temp = null;
        if(index < (size >> 1)){
            temp = first;
            for(int i =0;i<index;i++){
                temp = temp.next;
            }
        }else{
            temp = last;
            for(int i=size-1;i>index;i--){
                temp = temp.previous;
            }
        }    
        return temp;
    }
    
    //添加元素
    public void add(Object obj){
        Node node = new Node(obj);
        if(first == null){
            first = node;
            last = node;
        }else{
            node.previous = last;
            node.next = null;
            last.next = node;
            last = node;
        }
        size++;
    }
    
    //打印字符串
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        Node temp = first;
        while(temp != null){
            sb.append(temp.element + ",");
            temp = temp.next;
        }
        sb.setCharAt(sb.length() - 1, ']');
        return sb.toString();
    }
    
    public static void main(String[] args) {
        LinkedList03 ls = new LinkedList03();
        ls.add("sa");
        ls.add("sdsf");
        ls.add("kajs");
        ls.add("sajd");
        ls.add("sdsfgf");
        ls.add("kajsds");
        System.out.println(ls.size);
        System.out.println(ls.get(3));
        ls.remove(0);
        System.out.println(ls);
    }
}

 第四版

package com.zzp.demo.myCollection;
/**
 * 
 * 自定义链表
 * 增加插入节点
 * @author java
 *
 */
public class LinkedList04 {
    private Node first;
    private Node last;
    private int size;
    
    public Object get(int index){
        
        if(index < 0 || index > size - 1){
            throw new RuntimeException("索引不合法"+index);
        }
        
        Node temp = getNode(index);
        
        return temp != null ? temp.element : null;
    }
    
    public void remove(int index){
        Node temp = getNode(index);
        if(temp != null){
            Node up = temp.previous;
            Node down = temp.next;
            if(up != null){
                up.next = down;
            }
            if(down != null){
                down.previous = up;
            }
            if(index == 0){
                first = down;
            }
            if(index == size - 1){
                last = up;
            }
            size--;
        }
    }
    
    //增加操作
    public void add(int index,Object obj){
        Node newNode = new Node(obj);
        Node temp = getNode(index);
        if(temp != null){
            Node up = temp.previous;
            up.next = newNode;
            newNode.previous = up;
            
            newNode.next = temp;
            temp.previous = newNode;
        }
    }
    
    public Node getNode(int index){
        Node temp = null;
        if(index < (size >> 1)){
            temp = first;
            for(int i =0;i<index;i++){
                temp = temp.next;
            }
        }else{
            temp = last;
            for(int i=size-1;i>index;i--){
                temp = temp.previous;
            }
        }    
        return temp;
    }
    
    //添加元素
    public void add(Object obj){
        Node node = new Node(obj);
        if(first == null){
            first = node;
            last = node;
        }else{
            node.previous = last;
            node.next = null;
            last.next = node;
            last = node;
        }
        size++;
    }
    
    //打印字符串
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        Node temp = first;
        while(temp != null){
            sb.append(temp.element + ",");
            temp = temp.next;
        }
        sb.setCharAt(sb.length() - 1, ']');
        return sb.toString();
    }
    
    public static void main(String[] args) {
        LinkedList04 ls = new LinkedList04();
        ls.add("sa");
        ls.add("sdsf");
        ls.add("kajs");
        ls.add("sajd");
        ls.add("sdsfgf");
        ls.add("kajsds");
        System.out.println(ls.size);
        System.out.println(ls.get(3));
        ls.remove(0);
        ls.add(0,"sjjiej");
        System.out.println(ls);
    }
}

 第五版

package com.zzp.demo.myCollection;
/**
 * 
 * 自定义链表
 * 增加小的封装,增加泛型
 * @author java
 *
 */
public class LinkedList05<E> {
    private Node first;
    private Node last;
    private int size;
    
    private void checkIndex(int index){
        if(index < 0 || index > size - 1){
            throw new RuntimeException("索引不合法"+index);
        }
    }
    
    public E get(int index){
        
        checkIndex(index);
        
        Node temp = getNode(index);
        
        return temp != null ?(E) temp.element : null;
    }
    
    public void remove(int index){
        checkIndex(index);
        Node temp = getNode(index);
        if(temp != null){
            Node up = temp.previous;
            Node down = temp.next;
            if(up != null){
                up.next = down;
            }
            if(down != null){
                down.previous = up;
            }
            if(index == 0){
                first = down;
            }
            if(index == size - 1){
                last = up;
            }
            size--;
        }
    }
    
    //增加操作
    public void add(int index,E element){
        checkIndex(index);
        Node newNode = new Node(element);
        Node temp = getNode(index);
        if(temp != null){
            Node up = temp.previous;
            up.next = newNode;
            newNode.previous = up;
            
            newNode.next = temp;
            temp.previous = newNode;
        }
    }
    
    private Node getNode(int index){
        checkIndex(index);
        Node temp = null;
        if(index < (size >> 1)){
            temp = first;
            for(int i =0;i<index;i++){
                temp = temp.next;
            }
        }else{
            temp = last;
            for(int i=size-1;i>index;i--){
                temp = temp.previous;
            }
        }    
        return temp;
    }
    
    //添加元素
    public void add(E element){
        Node node = new Node(element);
        if(first == null){
            first = node;
            last = node;
        }else{
            node.previous = last;
            node.next = null;
            last.next = node;
            last = node;
        }
        size++;
    }
    
    //打印字符串
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        Node temp = first;
        while(temp != null){
            sb.append(temp.element + ",");
            temp = temp.next;
        }
        sb.setCharAt(sb.length() - 1, ']');
        return sb.toString();
    }
    
    public static void main(String[] args) {
        LinkedList05<String> ls = new LinkedList05<>();
        ls.add("sa");
        ls.add("sdsf");
        ls.add("kajs");
        ls.add("sajd");
        ls.add("sdsfgf");
        ls.add("kajsds");
        System.out.println(ls.size);
        System.out.println(ls.get(3));
        ls.remove(0);
        ls.add(0,"sjjiej");
        System.out.println(ls);
    }
}

 

posted on 2018-08-20 23:31  奋斗的小刀001  阅读(103)  评论(0编辑  收藏  举报

导航