摘要:是由一個一個節(jié)點連接起來的鏈表增刪改查其他檢索出第一個元素,但不取出檢索出第一個元素,同時取出
LinkedList是由一個一個節(jié)點連接起來的鏈表
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 Nodef = 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 (Nodex = 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); Nodex = node(index); E oldVal = x.item; x.item = element; return oldVal; }
查
public E get(int index) { checkElementIndex(index); return node(index).item; }
其他
// 檢索出第一個元素,但不取出 public E peek() { final Nodef = first; return (f == null) ? null : f.item; } // 檢索出第一個元素,同時取出 public E poll() { final Node f = first; return (f == null) ? null : unlinkFirst(f); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72809.html
摘要:線程不安全底層數(shù)據(jù)結(jié)構(gòu)是鏈表。的默認(rèn)初始化容量是,每次擴容時候增加原先容量的一半,也就是變?yōu)樵瓉淼谋秳h除元素時不會減少容量,若希望減少容量則調(diào)用它不是線程安全的。 前言 聲明,本文用得是jdk1.8 前一篇已經(jīng)講了Collection的總覽:Collection總覽,介紹了一些基礎(chǔ)知識。 現(xiàn)在這篇主要講List集合的三個子類: ArrayList 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組。線程不安全 ...
摘要:類鏈表容器也是通過對比源碼進行對比學(xué)習(xí)。增加一個結(jié)點不帶,直接尾插法當(dāng)鏈表里沒有一個元素時,頭尾都是該結(jié)點,并且該結(jié)點的前后都是空的。尾結(jié)點是該結(jié)點的前驅(qū)結(jié)點,該結(jié)點是尾節(jié)點的后繼結(jié)點,更新尾節(jié)點。 LinkedList類 鏈表容器也是通過對比jdk源碼進行對比學(xué)習(xí)。 1.定義結(jié)點類型 class Node{ E item; Node next; Node prev; Node(No...
摘要:類定義是接口的簡化版,支持按次序訪問,支持隨機訪問。否則將原尾節(jié)點的尾指針指向。在某結(jié)點之前插入元素。根據(jù)索引隨機訪問,為方法的真正實現(xiàn)。總結(jié)其實只要你對雙向鏈表結(jié)構(gòu)比較熟悉,那源碼讀起來就會很輕松。 linkedlist簡單介紹(jdk1.8) linkedlist的底層結(jié)構(gòu)是線性表的雙向鏈表,每個節(jié)點包括兩個指針域(一個指向前驅(qū)結(jié)點,一個指向后繼結(jié)點)和一個數(shù)據(jù)域,因為雙指針域的獨...
摘要:我們來看相關(guān)源碼我們看到封裝的和操作其實就是對頭結(jié)點的操作。迭代器通過指針,能指向下一個節(jié)點,無需做額外的遍歷,速度非常快。不同的遍歷性能差距極大,推薦使用迭代器進行遍歷。LinkedList類介紹 上一篇文章我們介紹了JDK中ArrayList的實現(xiàn),ArrayList底層結(jié)構(gòu)是一個Object[]數(shù)組,通過拷貝,復(fù)制等一系列封裝的操作,將數(shù)組封裝為一個幾乎是無限的容器。今天我們來介紹JD...
摘要:我們來看相關(guān)源碼我們看到封裝的和操作其實就是對頭結(jié)點的操作。迭代器通過指針,能指向下一個節(jié)點,無需做額外的遍歷,速度非常快。不同的遍歷性能差距極大,推薦使用迭代器進行遍歷。LinkedList類介紹 上一篇文章我們介紹了JDK中ArrayList的實現(xiàn),ArrayList底層結(jié)構(gòu)是一個Object[]數(shù)組,通過拷貝,復(fù)制等一系列封裝的操作,將數(shù)組封裝為一個幾乎是無限的容器。今天我們來介紹JD...
閱讀 2585·2019-08-30 10:53
閱讀 3189·2019-08-29 16:20
閱讀 2942·2019-08-29 15:35
閱讀 1765·2019-08-29 12:24
閱讀 2871·2019-08-28 18:19
閱讀 1848·2019-08-23 18:07
閱讀 2327·2019-08-23 15:31
閱讀 1166·2019-08-23 14:05