List介面原始碼剖析

2021-09-13 18:17:51 字數 2736 閱讀 9814

前言

覺得有必要好好的看看底層的一些東西,有些東西感覺理解的不是那麼透徹,如果有什麼錯誤,希望大家指正。

list結構圖

介面之間的關係,綠色實線圖表示繼承。在我之前的部落格已經說明,兩個介面之間是不能用實現的,需要用繼承。介面繼承之後,在實現子介面的時候需要將父類的介面也實現。因此,需要從iterable介面看起。

iterable介面

去掉了多餘注釋

public

inte***ce

iterable

}default spliterator

spliterator()

}

從這裡我們能夠較為清晰的看到,iterable介面主要的功能但是定義了遍歷的方法。

collection

public

inte***ce

collection

extends

iterable

,=default

boolean

removeif

(predicate<

?super e> filter)

}return removed;

}boolean

retainall

(collection<

?> c)

;//移除不相等的元素

void

clear()

;//移除所有元素

boolean

equals

(object o)

;//是否內容相等

inthashcode()

;//hash

@override

default spliterator

spliterator()

default stream

stream()

default stream

parallelstream()

}

顯然,先從iterable介面處繼承來了遍歷的方法,緊接著定義了介面必須擁有的方法,每個方法的功能已標註在**中,其實常用的方法就是上面的方法。

list

他需要將前者繼承過來,那麼肯定擁有上面的所有功能,就會很龐大了。

public

inte***ce

list

extends

collection

,,index=1,result=

boolean

removeall

(collection<

?> c)

;//移除擁有相同的元素

boolean

retainall

(collection<

?> c)

;//移除不相等的元素

default

void

replaceall

(unaryoperator

operator)

}@suppresswarnings()

default

void

sort

(comparator<

?super e> c)

}void

clear()

;//移除所有元素

boolean

equals

(object o)

;//是否內容相等

inthashcode()

;//hash

e get

(int index)

;//獲取index處元素

e set

(int index, e element)

;//向集合中的index處新增元素

void

add(

int index, e element)

;//無返回值的新增

e remove

(int index)

;//移除index處元素

intindexof

(object o)

;//返回o的初始位置

intlastindexof

(object o)

;//返回o的最後位置

listiterator

listiterator()

;//list遍歷器

listiterator

listiterator

(int index)

;//從第幾個開始遍歷

list

sublist

(int fromindex,

int toindex)

;@override

default spliterator

spliterator()

}

總結感覺把所有的方法都了然之後才能快速的想到該用什麼方法,這樣在處理問題的時候能夠有更多的想法。list介面是線性表的基礎介面,對他熟悉了也就是對線性表的一些問題透徹了。對於@override的方法還不是很清楚他的作用,也沒有呼叫過,後面知道了再進行補充。

積土成山,風雨興焉!!!

STL原始碼剖析 list

相較於vector的連續線性空間,list就顯得複雜許多,它的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。因此,list對於空間的運用有絕對的精準,一點也不浪費。而且,對於任何位置的元素插入或元素移除,list永遠是常數時間。list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶。另外,還...

STL原始碼剖析 list!!!

list和vector是兩個最常被使用的容器。相較於vector的連續線性空間,list就顯得複雜許多,它的好處就是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。而且對於任何位置的元素插入或元素移除,list永遠是常數時間。list是乙個雙向鍊錶,stl的list節點結構 template st...

STL原始碼剖析 三 list

gcc 版本4.4.0 這次我們看看stl中list是怎樣設計的。首先這個list要分為兩個部分,list結構和list節點的結構。首先看看list的節點 list node 由於 list node 是繼承 list node base。所以先來看看 list node base struct l...