集合繼承體系圖的理解

  

1、Collection、Collections的區別?java

  1. java.util.Collection是一個集合的頂級接口。它提供了對集合對象進行基本操做的通用接口方法。Collection接口在Java類庫中有不少具體的實現,其直接繼承接口有List與Set。算法

  2. Collections是集合類的一個工具類,其中提供了一系列靜態方法,用於對集合中元素進行排序、搜索以及線程安全等操做。數組

    1)排序(sort):使用sort方法能夠根據元素的天然順序對指定列表按升序進行排序。列表中的全部元素都必須實現Comparable接口。此列表內的全部元素都必須是使用指定比較器可相互比較的。安全

 1 List<Integer> list = new ArrayList<Integer>();  2         int array[] = {112, 111, 23, 456, 231 };  3         for (int i = 0; i < array.length; i++) {  4  list.add(array[i]);  5  }  6  Collections.sort(list);  7         for (int i = 0; i < array.length; i++) {  8  System.out.println(list.get(i));  9  } 10 結果:23  111  112  231  456

    2)混排(shuffling):混排算法所作的正好與sort相反,它打亂在一個List中可能有的任何排列的蹤影。也就是說,基於隨機源的輸入重排該list,這樣的排列具備相同的可能性(假設隨機源是公正的)。這個算法在實現一個碰運氣的遊戲中是很是有用的。例如,它可被用來混派表明一副牌的card對象的一個list。另外,在生成測試案例時,它也是十分有用的。數據結構

    3)反轉(reverse):使用reverse方法能夠根據元素的天然順序對指定列表按降序進行排序。Collections.reverse(list)多線程

    4)替換全部的元素(fill):使用指定元素替換指定列表中的全部元素。Collections.fill(li,"aaa");函數

    5)拷貝(copy):用兩個參數,一個目標list和一個源list,將源的元素拷貝到目標,並覆蓋它的內容。目標list至少與源同樣長。若是它更長,則在目標list中的剩餘元素不受影響。工具

      Collections.copy(list,li):前面一個參數是目標列表,後一個是源列表測試

    6)返回Collections中的最小元素(min):根據指定比較器產生的順序,返回給定collection的最小元素。collection中的全部元素都必須是經過指定比較器可相互比較的。spa

      Collections.min(list)

    7)返回Collections中的最大元素(max):根據指定比較器產生的順序,返回給頂collection的最大元素。Collections.max(list)

    8)lastIndexOfSubList:返回值定源列表中最後一次出現指定目標列表的起始位置。 int count = Collections.lastIndexOfSubList(list,li);

    9)Rotate:根據指定的距離循環移動指定列表中的元素。  Collections.rotate(list,-1); //若是是負數,則正向移動,正數則反向移動。

2、List、Set的區別?

  List與Set都繼承於Collection,Collection是集合的頂級接口;

  List爲有序可重複的集合接口,ArrayList、LinkedList、Vector爲其實現類;Set是無序不重複的集合接口,HashSet、LinkedHashSet、TreeSet爲其實現類。

3、ArrayList、LinkedList、Vector的區別?

  ArrayList、Vector:底層均爲數組,查詢快、增刪慢;ArrayList效率高、是線程不安全的;Vector效率低、線程安全,即某一時刻只有一個線程可以寫Vector,避免多線程同時寫而引發的不一致性。

  LinkedList:底層爲鏈表結構,查詢慢、增刪快;

4、HashMap、HashTable

  hashmap的效率高、是線程不安全的,容許鍵/值爲空;

  hashtable是線程安全的,效率低,不容許鍵/值爲空;

5、HashSet

  哈希表存放的是哈希值。hashset存儲元素的順序並非按照存入時的順序(和list顯然不一樣)而是按照哈希值來存的因此取數也是按照哈希值取得。元素的哈希值是經過元素的hashcode方法來獲取的,hashset首先判斷兩個元素的哈希值,若是哈希值同樣,接着會比較equals方法,若是equals結果爲true,hashset就視爲同一個元素。若是equals爲false就不是同一個元素。

  哈希值相同equals爲false的元素是怎麼存儲呢?就是在一樣的哈希值下順延(能夠認爲哈希值相同的元素放在一個哈希桶中),也就是哈希同樣的存一列。

6、TreeSet

  1. treeset是使用二叉樹的原理對add的對象按照指定的順序排序,每增長一個對象都會進行排序,將對象插入到二叉樹指定的位置;

  2. Integer和String對象均可以進行默認的treeset排序,而自定義的對象是不能夠的,本身定義的類必須實現Comparable接口,而且覆蓋相應的compareTo()函數,才能夠正常使用。

  3.在重寫compareTo()函數時,要返回相應的值才能使treeset按照必定的規則進行排序。

  4.比較此對象與指定對象順序,若是該對象小於、等於或大與指定對象,則分別返回負整數、零或正整數。

7、TreeMap(可排序)

  treeMap實現SortedMap接口,可以把它保存的記錄根據鍵排序,默認是按鍵值的升序排序,也能夠指定排序的比較器,當用iterator遍歷treeMap時,獲得的記錄是排過序的。

  若是使用排序的映射,建議使用treeMap。

  在使用treeMap時,key必須實現Comparable接口或在構造treeMap傳入自定義的Comparator,不然會在運行時拋出java.lang.ClassCastException類型的異常。

8、LinkedHashMap(記錄插入順序)

  LinkedHashMap是hashMap的一個子類,保存了記錄的插入順序,在用iterator遍歷LinkedHashMap時,先獲得的記錄確定是先插入的,也能夠在構造函數時帶參數,按照訪問次序排序。

9、Map接口與Collection接口的區別?

  Map是雙列的,Collection是單列的;

  Map的鍵值惟一,Collection的子接口set是惟一的;

  Map的數據結構只針對鍵有效,Collection針對元素有效;

集合 初始容量 擴容因子 負載因子 底層結構 線程是否安全
ArrayList 10 1.5 無(滿了擴容) 數組
Vector 10 2 無(滿了擴容) 數組
HashMap 16 2 0.75 數組+鏈表+紅黑樹
HashSet 16 2 0.75 數組+鏈表+紅黑樹
HashTable 11 2*1+1 0.75 數組+鏈表
相關文章
相關標籤/搜索