閱讀
分析這個介面的實現List Set Queue,達到對Collection集合這麼個大概念東西的瞭解
List
簡單看ArrayList,LinkedList
ArrayList
- fail-fst to iterator
- 擴容oldcapcity>>1 增肌0.5倍
- size記錄有效值數
- 操作時,會丟擲各種Exception。比如,add丟擲IndexOutOfBoundsException
- 值可以為null
LinkedList
- fail-fst to iterator
- unit為Node,而且這個Node是雙向連結串列
- 實現了Dequeue介面,佇列的特性,LinkedList也支援
總結:大量讀,改值使用ArrayList。刪除動作,或者每個item的大小不知,使用LinkedList。
這兩個資料結構,判斷是否存在某一個vaule的時候,使用的是equals方法。都對null進行了特殊處理。
Set
最大的一個特性就是沒不能有重複值。對element的空的限制,主要看具體實現類。Set我們簡單介紹下HashSet,TreeSet
HashSet
- 資料實際存放在HashMap。key為傳入的Object,value為空的Object
- 為了實現存入的Object不重複,你必須保證Object的equals方法為true時,hashcode必須為true。
- 這一點是對不重複的擴充套件。因為感覺很多人都不是很能理解equals和hashcode的關係。簡單來說就是,有條原則:equals相等就代表相同,hashcode必須相同。想象下,在HashSet中,兩個element,equal為true。但是,你沒有重寫hashcode,出現hashcode不同。那麼雜湊到的位置也就不同,就出現了儲存了重複的element的情況了。
這裡,給出一個連線hashCode equals講解。這篇很精髓了,值得一看。這裡並沒有指出LinkedHashSet,主要原因是和HashSet的主要區別在於換了個儲存資料的結構,前者為LinkedHashMap。
TreeSet
同HashSet一樣,主要區別再與,它儲存資料的結構是TreeMap。
Queue
不同方法對特殊情況的處理不一樣,先看下介面定義
add(E)//會丟擲IllegalStateException(capcity的限制),ClassCastException,NullPointerException(不能為null),IllegalArgumentException(element一些屬性限制加入queue)
offer(E)//ClassCastException,NullPointerException,IllegalArgumentException 返回true或false
remove():E//NoSuchElementException(queue為空),返回頭部的element
poll():E//返回頭部的element,為空時返回null
element():E//返回頭部element,但不刪除 為空時,NoSuchElementException
peek():E//返回頭部element,不刪除。為空時返回null
複製程式碼
由上面的介面定義可知:queue的Element不可為null。對佇列為空時有的丟擲異常,有的返回空(null)。這裡有一個重點就是:支援capcity,即有界無界。
他的主要實現是LinkedList和併發裡面的BlockingQueue