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的底層運行方式: 數組
HashSet集合對象的加入過程:
hashset底層是hash值的地址,它裏面存的對象是無序的。
第一個對象進入集合時,hashset會調用object類的hashcode根據對象在堆內存裏的地址調用對象重寫的hashcode計算出一個hash值,而後第一個對象就進入hashset集合中的任意一個位置。
第二個對象開始進入集合,hashset先根據第二個對象在堆內存的地址調用對象的計算出一個hash值,若是第二個對象和第一個對象在堆內存裏的地址是相同的,那麼獲得的hash值也是相同的,直接返回true,hash獲得true後就不把第二個元素加入集合(這段是hash源碼程序中的操做)。若是第二個對象和第一個對象在堆內存裏地址是不一樣的,這時hashset類會先調用本身的方法遍歷集合中的元素,當遍歷到某個元素時,調用對象的equals方法,若是相等,返回true,則說明這兩個對象的內容是相同的,hashset獲得true後不會把第二個對象加入。性能
TreeSet集合對象的加入過程:
TreeSet的底層是經過二叉樹來完成存儲的,無序的集合
當咱們將一個對象加入treeset中,treeset會將第一個對象做爲根對象,而後調用對象的compareTo方法拿第二個對象和第一個比較,當返回至=0時,說明2個對象內容相等,treeset就不把第二個對象加入集合。返回>1時,說明第二個對象大於第一個對象,將第二個對象放在右邊,返回-1時,則將第二個對象放在左邊,依次類推 code
5. HashMap與TreeMap的使用場景
HashMap經過hashcode對其內容進行快速查找,而 TreeMap中全部的元素都保持着某種固定的順序,若是你須要獲得一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。
使用場景
HashMap:適用於在Map中插入、刪除和定位元素。
Treemap:適用於按天然順序或自定義順序遍歷鍵(key)對象
對於定位一個值,插入一個數目以及刪除一個條目而言,HashMap是高效的。blog
6. HashMap 與 TreeMap 與 LinkedHashMAp排序
HashMap 是 無序的索引
TreeMap 是按鍵的升序排列的。接口
LinkedHashMap 是 按元素最後一次訪問的時間從早到晚排序的。內存
參考:http://liuyuan418921673.iteye.com/blog/2256120