成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

LinkedList源碼(基礎(chǔ)代碼)

mikasa / 2184人閱讀

摘要:是由一個(gè)一個(gè)節(jié)點(diǎn)連接起來的鏈表增刪改查其他檢索出第一個(gè)元素,但不取出檢索出第一個(gè)元素,同時(shí)取出

LinkedList是由一個(gè)一個(gè)節(jié)點(diǎn)連接起來的鏈表

private static class Node {
        E item;
        Node next;
        Node prev;

        Node(Node prev, E element, Node next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

    public boolean add(E e) {
        linkLast(e);
        return true;
    }
    public void addFirst(E e) {
        linkFirst(e);
    }
    private void linkFirst(E e) {
        final Node f = first;
        final Node newNode = new Node<>(null, e, f);
        first = newNode;
        if (f == null)
            last = newNode;
        else
            f.prev = newNode;
        size++;
        modCount++;
    }
    public void addLast(E e) {
        linkLast(e);
    }
    void linkLast(E e) {
        final Node l = last;
        final Node newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

    public boolean remove(Object o) {
        if (o == null) {
            for (Node x = first; x != null; x = x.next) {
                if (x.item == null) {
                    unlink(x);
                    return true;
                }
            }
        } else {
            for (Node x = first; x != null; x = x.next) {
                if (o.equals(x.item)) {
                    unlink(x);
                    return true;
                }
            }
        }
        return false;
    }
    
    public E remove(int index) {
        checkElementIndex(index);
        return unlink(node(index));
    }

    public E set(int index, E element) {
        checkElementIndex(index);
        Node x = node(index);
        E oldVal = x.item;
        x.item = element;
        return oldVal;
    }

    public E get(int index) {
        checkElementIndex(index);
        return node(index).item;
    }

其他

    // 檢索出第一個(gè)元素,但不取出
    public E peek() {
        final Node f = first;
        return (f == null) ? null : f.item;
    }
    // 檢索出第一個(gè)元素,同時(shí)取出
    public E poll() {
        final Node f = first;
        return (f == null) ? null : unlinkFirst(f);
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72809.html

相關(guān)文章

  • List集合就這么簡(jiǎn)單【源碼剖析】

    摘要:線程不安全底層數(shù)據(jù)結(jié)構(gòu)是鏈表。的默認(rèn)初始化容量是,每次擴(kuò)容時(shí)候增加原先容量的一半,也就是變?yōu)樵瓉淼谋秳h除元素時(shí)不會(huì)減少容量,若希望減少容量則調(diào)用它不是線程安全的。 前言 聲明,本文用得是jdk1.8 前一篇已經(jīng)講了Collection的總覽:Collection總覽,介紹了一些基礎(chǔ)知識(shí)。 現(xiàn)在這篇主要講List集合的三個(gè)子類: ArrayList 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組。線程不安全 ...

    cpupro 評(píng)論0 收藏0
  • JAVA基礎(chǔ)整理(五)---手寫簡(jiǎn)單的linkedlist來學(xué)習(xí)linkedlist

    摘要:類鏈表容器也是通過對(duì)比源碼進(jìn)行對(duì)比學(xué)習(xí)。增加一個(gè)結(jié)點(diǎn)不帶,直接尾插法當(dāng)鏈表里沒有一個(gè)元素時(shí),頭尾都是該結(jié)點(diǎn),并且該結(jié)點(diǎn)的前后都是空的。尾結(jié)點(diǎn)是該結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),該結(jié)點(diǎn)是尾節(jié)點(diǎn)的后繼結(jié)點(diǎn),更新尾節(jié)點(diǎn)。 LinkedList類 鏈表容器也是通過對(duì)比jdk源碼進(jìn)行對(duì)比學(xué)習(xí)。 1.定義結(jié)點(diǎn)類型 class Node{ E item; Node next; Node prev; Node(No...

    dantezhao 評(píng)論0 收藏0
  • 集合源碼學(xué)習(xí)之路---linkedlist

    摘要:類定義是接口的簡(jiǎn)化版,支持按次序訪問,支持隨機(jī)訪問。否則將原尾節(jié)點(diǎn)的尾指針指向。在某結(jié)點(diǎn)之前插入元素。根據(jù)索引隨機(jī)訪問,為方法的真正實(shí)現(xiàn)??偨Y(jié)其實(shí)只要你對(duì)雙向鏈表結(jié)構(gòu)比較熟悉,那源碼讀起來就會(huì)很輕松。 linkedlist簡(jiǎn)單介紹(jdk1.8) linkedlist的底層結(jié)構(gòu)是線性表的雙向鏈表,每個(gè)節(jié)點(diǎn)包括兩個(gè)指針域(一個(gè)指向前驅(qū)結(jié)點(diǎn),一個(gè)指向后繼結(jié)點(diǎn))和一個(gè)數(shù)據(jù)域,因?yàn)殡p指針域的獨(dú)...

    stackfing 評(píng)論0 收藏0
  • LinkedList源碼解析

    摘要:我們來看相關(guān)源碼我們看到封裝的和操作其實(shí)就是對(duì)頭結(jié)點(diǎn)的操作。迭代器通過指針,能指向下一個(gè)節(jié)點(diǎn),無需做額外的遍歷,速度非???。不同的遍歷性能差距極大,推薦使用迭代器進(jìn)行遍歷。LinkedList類介紹 上一篇文章我們介紹了JDK中ArrayList的實(shí)現(xiàn),ArrayList底層結(jié)構(gòu)是一個(gè)Object[]數(shù)組,通過拷貝,復(fù)制等一系列封裝的操作,將數(shù)組封裝為一個(gè)幾乎是無限的容器。今天我們來介紹JD...

    番茄西紅柿 評(píng)論0 收藏0
  • LinkedList源碼解析

    摘要:我們來看相關(guān)源碼我們看到封裝的和操作其實(shí)就是對(duì)頭結(jié)點(diǎn)的操作。迭代器通過指針,能指向下一個(gè)節(jié)點(diǎn),無需做額外的遍歷,速度非???。不同的遍歷性能差距極大,推薦使用迭代器進(jìn)行遍歷。LinkedList類介紹 上一篇文章我們介紹了JDK中ArrayList的實(shí)現(xiàn),ArrayList底層結(jié)構(gòu)是一個(gè)Object[]數(shù)組,通過拷貝,復(fù)制等一系列封裝的操作,將數(shù)組封裝為一個(gè)幾乎是無限的容器。今天我們來介紹JD...

    番茄西紅柿 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

mikasa

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<