基本上找到的上層就是Collection、Map、Dictionary啦~,
首先說一下Collection和Map的區別,Collection是鏈表數組類型的集合List、Set,只包含一種數據結構,而Map是鍵值對類型的集合,包含着AbstractMap。
下面說一下List和Set的區別,其實很簡單啦 List有序而Set無序,而且List可以添加重複的元素哦 Set可不行,
這裏引用一下,說明一下Set和List的區別
List:1.可以允許重複的對象。
2.可以插入多個null元素。
3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。
4.常用的實現類有 ArrayList、LinkedList 和 Vector。ArrayList 最爲流行,它提供了使用索引的隨意訪問,而 LinkedList 則對於經常需要從 List 中添加或刪除元素的場合更爲合適。(因爲鏈表的增加和刪除比數組快,注意底層)
Set:1.不允許重複對象
2. 無序容器,你無法保證每個元素的存儲順序,TreeSet通過 Comparator 或者 Comparable 維護了一個排序順序。
3. 只允許一個 null 元素
4.Set 接口最流行的幾個實現類是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基於 HashMap 實現的 HashSet;TreeSet 還實現了 SortedSet 接口,因此 TreeSet 是一個根據其 compare() 和 compareTo() 的定義進行排序的有序容器。
https://www.cnblogs.com/IvesHe/p/6108933.html
這時候問題來了,一個寶寶問:那Map接口下的集合就不能排序了嘛?一下是解決方案
-
public static void main(String[] args){
-
Map<String,String> map = new HashMap();
-
map.put("A","@");
-
map.put("W","@");
-
map.put("E","@");
-
map.put("Q","@");
-
map.put("R","@");
-
map.put("B","@");
-
map.put("U","@");
-
//這樣能得到map的key和value,在某些應用中,這很有用
-
for(Entry<String,String> entry:map.entrySet()){
-
System.out.println(entry.getKey()+""+entry.getValue());
-
}
-
//如果想對Map集合的元素按照key進行排序怎麼辦?如下,用Collections.sort方法
-
List<Map.Entry<String, String>> list = new LinkedList<>(map.entrySet());
-
Collections.sort(list, new Comparator<Map.Entry<String, String>>() {
-
@Override
-
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
-
return (o1.getKey()).compareTo(o2.getKey());
-
}
-
});
-
System.out.println(list);
-
}
然後就開始說Map下的hashMap TreeMap 和ConcurrentHashMap了
HashMap太多了 主要就是線程不安全,但人家速度快啊,那爲了解決這個問題ConcurrentHashMap來了
ConcurrentHashMap有 concurrencyLevel:並行級別、併發數、Segment 數,怎麼翻譯不重要,理解它。默認是 16,也就是說 ConcurrentHashMap 有 16 個 Segments,所以理論上,這個時候,最多可以同時支持 16 個線程併發寫,只要它們的操作分別分佈在不同的 Segment 上。這個值可以在初始化的時候設置爲其他值,但是一旦初始化以後,它是不可以擴容的。這裏不贅述,相信可參考http://www.importnew.com/28263.html;