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 | 數組+鏈表 | 是 |