多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > JDK源碼-LinkedList源碼

JDK源碼-LinkedList源碼

來源:程序員人生   發布時間:2015-02-06 09:11:02 閱讀次數:2410次
1,LinkedList:
    ⑴,實現了List接口,允許null元素。LinkedList還為鏈表開頭和結尾提供了操作,所以使用LinekedList可以用作堆棧、列隊或雙端隊列。
    ⑵,LinkedList實現Deque接口,提供了基于隊列的先進先出序列的實現。
    ⑶,所有的操作都是依照兩重鏈表來實現的。
    ⑷,操作為非線程安全的,如果多個線程中,存在修改鏈表結構的操作,則必須保證線程安全。
2,LinkedList繼承AbstractSequentialList實現Lise、Deque、Cloneable、Serializable接口。
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
    ⑴,AbstractSequentialList繼承AbstractList,AbstractList屬于ArrayList的父類。
    ⑵,Deque繼承自Queue,定義了隊列接口操作。Queue接口繼承Collection接口。
 3,AbstractSequentialList類詳解:
    此類提供了List接口的主要實現。
    要實現1個列表,程序猿只需要擴大此類,并提供listIterator和size方法的實現便可。對不可修改的列表,只需要實現迭代器對應的方法便可。
    該類主要方法有:get   set   add  remove  addAll  iterator  listIterator方法。
    其中,get   set   add  remove  addAll方法均是基于 iterator  listIterator方法實現。
public E remove(int index) {
try {
ListIterator<E> e = listIterator(index);
E outCast = e.next();
e.remove();
return outCast;
} catch (NoSuchElementException exc) {
throw new IndexOutOfBoundsException("Index: "+index);
}
}
public E set(int index, E element) {
try {
ListIterator<E> e = listIterator(index);
E oldVal = e.next();
e.set(element);
return oldVal;
} catch (NoSuchElementException exc) {
throw new IndexOutOfBoundsException("Index: "+index);
}
}
3,LinkedList成員變量:
    ⑴,header:Entry屬性的變量。Entry內部類,定義了1個鏈表的數據結構。
private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;
 
Entry(E element, Entry<E> next, Entry<E> previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}
    ⑵,size:LinkedList元素長度。
4,第1類方法,對Entry對象的操作:
    ⑴,addBefore(E e, Entry<E> entry):增加e元素至entry鏈表中。
private Entry<E> addBefore(E e, Entry<E> entry) {
Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);//生成新的Entry對象,Entry對象的前置指向當前entry的前置元素。
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size++;
modCount++;
return newEntry;
}
   插入操作可參考下圖:

主要操作觸及,new元素的p指向了old元素,所以下1步將old元素的next指向new元素,然后獎new元素的next的p元素指向new元素本身。基本就是單鏈表的刪除操作而已。
 ⑵,remove:鏈表元素的刪除
private E remove(Entry<E> e) {
if (e == header)
throw new NoSuchElementException();
 
E result = e.element;
e.previous.next = e.next;
e.next.previous = e.previous;
e.next = e.previous = null;
e.element = null;
size--;
modCount++;
return result;
}
remove操作,則是將e元素的p指向e的next,將e的next的p指向e的p。使
e的p和n都指向為null,將e元素指向為null。
5,第2類方法,構造方法。
public LinkedList():默許構造函數,初始化鏈表頭。
public LinkedList() {
header.next = header.previous = header;
}
public LinkedList(Collection<? extends E> c):構造List包括c中所有元素。
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
6,單鏈表的基本操作:
    ⑴,add:
public boolean add(E e) {
addBefore(e, header);
return true;
}
    ⑵,remove(Object o):移除對應元素。
public boolean remove(Object o) {
if (o==null) {
for (Entry<E> e = header.next; e != header; e = e.next) {
if (e.element==null) {
remove(e);
return true;
}
}
} else {
for (Entry<E> e = header.next; e != header; e = e.next) {
if (o.equals(e.element)) {
remove(e);
return true;
}
}
}
return false;
}
我們可以看到如果元素為null直接用的==判斷相等,否則調用對應對象的equals方法移除。
7,隊列方法:
    ⑴.addFirst(E e):在鏈表開頭增加元素。
public void addFirst(E e) {
addBefore(e, header.next);
}
    ⑵,addLast:在鏈表末尾增加元素
public void addLast(E e) {
addBefore(e, header);
}
    ⑶,removeFirst:首元素出隊。
public E removeLast() {
return remove(header.previous);
}
8,ListIterator:構造適用與LinkedList的迭代器。
private class ListItr implements ListIterator<E>
private Entry<E> lastReturned = header;
private Entry<E> next;
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲综合免费视频 | 免费91最新地址永久入口 | 亚洲一区二区三区四区在线观看 | 伊人影院在线观看视频 | 大杳焦伊人久久综合热 | 宇都宫紫苑在线视频 | 老司机成人在线视频 | 69视频在线观看xxxxx | 精品动漫第一页 | 日本a级毛片免费视频播放 日本a毛片 | 国产精品亚洲精品爽爽 | 国产裸舞福利在线视频合集 | 欧美精品国产精品 | 国产精品第3页 | 欧美精品videosbestsex日本 | 麻豆69堂免费视频 | 在线国产视频观看 | 波多野结衣在线观看一区 | 欧美自拍网 | 亚洲最大免费视频网 | 午夜影院免费在线观看 | 日韩一级高清 | 午夜三级在线观看 | 亚洲日本免费 | 波多野结衣久久国产精品 | 免费国产zzzwww色 | 中文成人在线视频 | 久久v| xxx在线视频 | 国产在线精品一区二区中文 | 亚洲精品国产一区二区三区四区 | 日本www高清 | 国产亚洲精品资源一区 | 亚洲人成网址在线观看 | 天堂tv亚洲tv日本tv不卡 | 欧美黑人性猛交 | 自拍中文字幕 | 欧美极品videosvideoxxx | 美国一级毛片视频 | 亚洲图片另类 | 午夜dj视频免费完整高清视频 |