前言
覺得有必要好好的看看底層的一些東西,有些東西感覺理解的不是那麼透徹,如果有什麼錯誤,希望大家指正。
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...