1. 程式人生 > >Arraylist 和 linkedlist || hashset 和treeset. || hashMap 和 TreeMap

Arraylist 和 linkedlist || hashset 和treeset. || hashMap 和 TreeMap

blog hash算法 一次 重寫 固定 表結構 相同 當我 若有

參考:http://liuyuan418921673.iteye.com/blog/2256120

1. ArrayList和LinkedList的區別和使用場景
ArryList 與linkedList 都實現了List 接口
ArrayList:實現list接口 采用數組結構保存對象
優點:便於對集合進行快速的隨機訪問 查詢操作效率比較高
缺點:插入和刪除操作效率比較低
原因:指定位置索引插入對象時,會同時將此索引位置之後的所有對象相應的向後移動一位。刪除會同時向前移動一位。
linkedList:實現list接口 采用鏈表結構保存對象
優點:插入和刪除操作效率比較高
缺點:查詢操作效率比較低
原因:鏈表結構在插入對象時只需要簡單的需該鏈接位置,省去了移動對象的操作 在查詢上LinkedList只能從鏈表的一端移動到另一端故效率較低
使用場景:
ArrayList使用場景:一般順序遍歷情況下使用ArrayList 盡量不對ArrayList進行插入或刪除操作(刪除尾部除外),若有多次刪除/插入操作又有隨機遍歷的需求,可以再構建一個ArrayList,把復合條件的對象放入新ArrayList,而不要頻繁操作原ArrayList

LinkedList使用場景:經常有刪除/插入操作而順序遍歷列表

3. HashSet與TreeSet的使用場景
HashSet:哈希表是通過使用稱為散列法的機制來存儲信息的,元素並沒有以某種特定順序來存放
TreeSet:提供一個使用樹結構存儲Set接口的實現(紅黑樹算法),對象以升序順序存儲,訪問和遍歷的時間很快。
使用場景:HashSet是基於Hash算法實現的,其性能通常都優於TreeSet。我們通常都應該使用HashSet,在我們需要排序的功能時,我們才使用TreeSet。


4.HashSet與TreeSet的底層運行方式:
TreeSet集合對象的加入過程:
TreeSet的底層是通過二叉樹來完成存儲的,無序的集合
當我們將一個對象加入treeset中,treeset會將第一個對象作為根對象,然後調用對象的compareTo方法拿第二個對象和第一個比較,當返回至=0時,說明2個對象內容相等,treeset就不把第二個對象加入集合。返回>1時,說明第二個對象大於第一個對象,將第二個對象放在右邊,返回-1時,則將第二個對象放在左邊,依次類推

HashSet集合對象的加入過程:
hashset底層是hash值的地址,它裏面存的對象是無序的。
第一個對象進入集合時,hashset會調用object類的hashcode根據對象在堆內存裏的地址調用對象重寫的hashcode計算出一個hash值,然後第一個對象就進入hashset集合中的任意一個位置。
第二個對象開始進入集合,hashset先根據第二個對象在堆內存的地址調用對象的計算出一個hash值,如果第二個對象和第一個對象在堆內存裏的地址是相同的,那麽得到的hash值也是相同的,直接返回true,hash得到true後就不把第二個元素加入集合(這段是hash源碼程序中的操作)。如果第二個對象和第一個對象在堆內存裏地址是不同的,這時hashset類會先調用自己的方法遍歷集合中的元素,當遍歷到某個元素時,調用對象的equals方法,如果相等,返回true,則說明這兩個對象的內容是相同的,hashset得到true後不會把第二個對象加入

5. HashMap與TreeMap的使用場景
HashMap通過hashcode對其內容進行快速查找,而 TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。
使用場景
HashMap:適用於在Map中插入、刪除和定位元素。
Treemap:適用於按自然順序或自定義順序遍歷鍵(key)

對於定位一個值,插入一個數目以及刪除一個條目而言,HashMap是高效的。

6. HashMap 與 TreeMap 與 LinkedHashMAp

  HashMap 是 無序的

  TreeMap 是按鍵的升序排列的。

  LinkedHashMap 是 按元素最後一次訪問的時間從早到晚排序的。

Arraylist 和 linkedlist || hashset 和treeset. || hashMap 和 TreeMap