国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Java容器源碼LinkedList原理解析

瀏覽:12日期:2022-08-21 08:24:08

LinkedList簡介

LinkedList是一個使用雙向鏈表結構實現的容器,與ArrayList一樣,它能動態擴充其長度,LinkedList相較于ArrayList,其任意位置插入速度比ArrayList要快,但是其查詢速度要比ArrayList要慢;LinkedList繼承自AbstractSequentialList,實現了List、Deque、Cloneable、Serializable接口。

LinkedList UML圖如下:

Java容器源碼LinkedList原理解析

和ArrayList一樣,LinkedList也不是一個線程安全的容器。

LinkedList源碼分析

構造方法

LinkedList有兩個構造方法:

public LinkedList() {}//從已有的一個容器創建一個LinkedList對象public LinkedList(Collection<? extends E> c) { this(); addAll(c);}

addAll()方法:

public boolean addAll(Collection<? extends E> c) { return addAll(size, c);}public boolean addAll(int index, Collection<? extends E> c) { //檢查index是否溢出 checkPositionIndex(index); Object[] a = c.toArray(); int numNew = a.length; if (numNew == 0) return false; //獲取第index位置的node元素和node的前一個元素 //succ:第index位置的node元素 //pred:index位置前一個node元素 Node<E> pred, succ; if (index == size) { succ = null; pred = last; } else { succ = node(index); pred = succ.prev; } //遍歷,將元素插入鏈表中 for (Object o : a) { @SuppressWarnings('unchecked') E e = (E) o; Node<E> newNode = new Node<>(pred, e, null); if (pred == null) first = newNode; else pred.next = newNode; pred = newNode; } if (succ == null) { last = pred; } else { pred.next = succ; succ.prev = pred; } size += numNew; modCount++; return true;}

add方法

LinkedList也有兩個add方法,如下:

public boolean add(E e) { //添加元素到隊尾 linkLast(e); return true;}public void add(int index, E element) { //檢查index是否溢出 checkPositionIndex(index); if (index == size) //index == size,直接添加到隊尾 linkLast(element); else //index != size,添加元素到index位置 linkBefore(element, node(index));}

linkLast方法:

void linkLast(E e) { final Node<E> l = last; //新建一個node,將其前一個元素指針指向原鏈表的最后一個元素 final Node<E> newNode = new Node<>(l, e, null); //更新尾指針 last = newNode; if (l == null) //若原last==null說明此時鏈表就一個元素 first = newNode; else //更新原鏈表尾元素指針 l.next = newNode; size++; modCount++;}

linkBefore方法:

void linkBefore(E e, Node<E> succ) { // assert succ != null; //獲取指定位node元素的前一個元素pred final Node<E> pred = succ.prev; //新建一個node,將其前指針指向pred元素 final Node<E> newNode = new Node<>(pred, e, succ); //將指定位置的node元素的前指針指向新元素,完成插入 succ.prev = newNode; if (pred == null) first = newNode; else pred.next = newNode; size++; modCount++;}

獲取指定位置node指針方法node:

Node<E> node(int index) { // assert isElementIndex(index); //index > size/2時,說明在鏈表前半段,從前往后搜索 if (index < (size >> 1)) { Node<E> x = first; for (int i = 0; i < index; i++) x = x.next; return x; //index < size/2時,從后往前搜索 } else { Node<E> x = last; for (int i = size - 1; i > index; i--) x = x.prev; return x; }}

get方法也比較簡單,首先檢測index是否溢出,然后直接找到index位置的元素,并返回其item。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲另类激情综合偷自拍图 | 91精品免费看| 欧美成人全部视频 | 国产免费福利体检区久久 | 国产成人精品午夜二三区 | 欧美专区一区二区三区 | 国产精品美女久久福利网站 | 亚洲韩精品欧美一区二区三区 | 国产精品成人在线播放 | 中文字幕亚洲一区二区三区 | 高清毛片一区二区三区 | 国内自产拍自a免费毛片 | 成人伊人青草久久综合网 | 91亚洲精品一区二区福利 | 亚洲欧美手机在线观看 | 国产精品视频一区二区三区 | 日本aaaa级毛片在线看 | a级片在线免费观看 | 国产高清视频a在线大全 | 国产韩国精品一区二区三区久久 | 91亚洲精品一区二区在线观看 | 午夜免费69性视频爽爽爽 | 亚洲成人免费网址 | 久久一级毛片 | 国产男人的天堂 | 中国一级毛片录像 | 亚洲情a成黄在线观看动 | www.成年人 | 亚洲另类在线视频 | 成年人免费在线视频网站 | 国产在线观看第一页 | 一区二区三区国模大胆 | 91香蕉国产线在线观看免费 | 精品72久久久久久久中文字幕 | 天堂8在线天堂资源bt | 国产一区二区三区美女在线观看 | 欧美成人精品免费播放 | 狠狠色丁香久久综合网 | 国产在线精品观看 | 97免费视频观看 | 亚洲免费高清 |