JavaのLinkedListの(追加、見つける、ToString関数を含む)シンプルな手書き

@ Java300学習の概要

カスタムノード

LINKLIST底が二重リストをリンクされています。低問い合わせ効率によって特徴づけられるが、高効率の追加や削除、スレッドセーフ。
リンクされたリストデータはノードに格納され、各ノードは、前と次のノードへのポインタを有しています。

ggLinkedListクラスを作成するには、ノードオブジェクトのエントリを作成することができます。

public class Entry {
    Entry previous;
    Entry next;
    Object element;
    
    public Entry(Entry previous, Entry next, Object element) {
        super();
        this.previous = previous;
        this.next = next;
        this.element = element;
    }

    public Entry(Object element) {
        super();
        this.element = element;
    }
}

第二に、addメソッドを上げます

LinkedListの要素はメソッドを追加追加することによって、それを埋めます。
クラスを構築します。

public class ggLinkedList {
    private Entry first; //链表头指针,指向第一个节点
    private Entry last; //链表尾指针,指向最后一个节点
    private int size; //长度,增加节点和删除节点时++或--
    
    //往链表尾处添加元素
    public void add(Object obj) {
        Entry entry = new Entry(obj);
        
        if(first == null) {
            first = entry;
            last = entry;
        }else {
        
            entry.previous = last; //新节点头指针指向上一个节点
            entry.next = null; //新节点尾指针指向空
            
            last.next = entry; //上一个节点的尾指针指向新添加节点
            last = entry;//尾指针指向新节点
        }
        size++;//链表长度增加一
    }
    public static void main(String[] args) {
        ggLinkedList list = new ggLinkedList();
        list.add('a');
    }
}

第三に、増加のtoStringメソッド

ggLinkedListクラスでは、toStringメソッド、リンクされたリストの各ノードの出力データの配列を加えます。
メイン関数呼び出しのSystem.out.println(リスト)は、デフォルトのtoStringメソッドによって呼び出されます。

public String toString() {
        StringBuilder sb = new StringBuilder("[");
        Entry  temp = first;
        while(temp!=null) {
            sb.append(temp.element+",");
            temp = temp.next;
        }
        sb.setCharAt(sb.length()-1,']');
        return sb.toString();
    }

第四に、検索方法を得る増やします

iノードを見つけるLinkedListの上のデータに対応し、番号を渡すことによって、()メソッドを取得します。

public Object get(int index) {
        if(index< 0||index > size -1) {
            throw new RuntimeException("索引数字不合法" + index);
        }
        if(index <= (size>>1)) { //索引index小于链表长度的一半,从链表头部开始查找
            Entry temp = first;
            for(int i = 0;i<index;i++) {
                temp = temp.next;
            }
            return temp.element;
        }else
        {
            Entry temp = last;  //索引index大于链表长度的一半,从链表尾部开始查找
            for(int i = size-1;i > index;i--) { 
                temp = temp.previous;
            }
            return temp.element;
        }
    }

おすすめ

転載: www.cnblogs.com/gg12138/p/11550267.html