Collection

單同志發表於2019-08-16

閱讀

分析這個介面的實現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 返回truefalse
remove():E//NoSuchElementException(queue為空),返回頭部的element
poll():E//返回頭部的element,為空時返回null
element():E//返回頭部element,但不刪除 為空時,NoSuchElementException
peek():E//返回頭部element,不刪除。為空時返回null
複製程式碼

由上面的介面定義可知:queue的Element不可為null。對佇列為空時有的丟擲異常,有的返回空(null)。這裡有一個重點就是:支援capcity,即有界無界。

他的主要實現是LinkedList和併發裡面的BlockingQueue

BlickingQueue

相關文章