如何回答關於List和Set的問題

 首先,先關注其共同點。編程

  List和Set都是繼承自Collection接口
  接下來咱們着重分析它們的不一樣點。函數

  List特色:元素有放入順序,元素能夠重複;優化

  Set特色:元素無放入順序,元素不可重複(注意:元素雖然沒有放入順序,可是元素在set中的位置是有該元素的HashCode決定的,其位置是固定的) 。
  List接口三個經常使用實現類:LinkedList,ArrayList,Vector ;設計

  Set接口三個經常使用實現:HashSet(底層由HashMap實現),LinkedHashSet,TreeSet。code

List (inteface) 
次序是List 的最重要特色,它確保維護元素特定的順序。
ArrayList 容許對元素快速隨機訪問。
LinkedList 對順序訪問進行優化,向List 中間插入與移除的開銷並不大,具備addFrist(),addLast(),getFirst(),getLast(),removeFirst()和removeLast()。這些方法使得LinkedList可看成堆棧/隊列/雙向隊列。
Set (inteface) 
存入Set 的每一個元素必須惟一,不保證維護元素的次序.加入Set 的Object必須定義equals()方法 。
HashSet 爲快速查找而設計的Set ,存入HashSet對象必須定義hashCode()。
TreeSet  保護次序的Set ,使用它能夠從Set 中提取有序序列。
LinkedHashSet  具備HashSet的查詢速度,且內部使用鏈表維護元素的次序。
它們之間的存儲方式不同: 
TreeSet採用紅黑樹的樹據結構排序元素. 
HashSet採用散列函數,這是專門爲快速查詢而設計的. 
LinkedHashSet內部使用散列以加快查詢速度,同時使用鏈表維護元素的次序. 
使用HashSet/TreeSet時,必須爲定義equals();而HashCode()是針對HashSet,做爲一種編程風格,當覆蓋equals()的時候,就應該同時覆蓋hashCode().對象

相關文章
相關標籤/搜索