Java基礎 (5) - 集合

Java集合大體分爲 List、Set、Queue和Map 四種體系,
List表明有序、重複的集合;(ArrayList、LinkedList、Vector)
Set表明無序、不可重複的集合; (HashSet、LInkedHashSet、TreeSet)
Queue Java5增長,表明一種隊列的集合 (priorityqueue)
Map則表明具備映射關係的集合html

Collection接口
1.Set、LIst、Queue都繼承Collection接口。
2.HashSet不能存重複的值(元素能夠爲null),線程不安全,且是無序的,若是想有序使用LinkedHashSet。(因爲使用了鏈表 插入和刪除速度變快 但遍歷速度下降)
3.ArryaList能存重複的值(元素能夠爲null),有序的,線程不安全,若是想線程安全可使用Vector(有序)。還有個經常使用的LinkedList,插入和刪除速度快,但遍歷速度慢。
4.queuejava

Map
1.HashMap 能夠存重複的值(元素能夠爲null) 線程不安全,且是無序的。想要線程安全可使用HashTable。但HashTable不能使用null做爲鍵或值 , 想要有序 可使用LinkedHashMap。
2.HashMap和HashTab的區別https://blog.csdn.net/mynameishuangshuai/article/details/52748731
3.區別點https://blog.csdn.net/xiamiflying/article/details/73050577
4.HashMap原理 https://blog.csdn.net/visant/article/details/80045154
https://www.jianshu.com/p/8b372f3a195d/
參考:
https://www.jianshu.com/p/589d58033841
https://blog.csdn.net/world_snow/article/details/79073234數組

線程安全
同步集合類: vector 、HashTable、 同步集合包裝類 - Collections.synchronizedMap()和Collections.synchronizedList() 
併發集合類: ConcurrentHashMap 、CopyOnWriteArrayList、CopyOnWriteHashSet安全

同步集合比並發集合會慢得多,主要緣由是鎖,同步集合會對整個Map或List加鎖
ConcurrentHashMap:把整個Map 劃分紅幾個片斷,只對相關的幾個片斷上鎖,同時容許多線程訪問其餘未上鎖的片斷。
CopyOnWriteArrayList:CopyOnWriteArrayList、CopyOnWriteArraySet類(沒有CopyOnWriteMap實現)容許多個線程以非同步的方式讀,當有線程寫的時候它會將整個List複製一個副本給它(寫在副本),適合讀多寫少這種場景,這會比使用同步集合更具備可伸縮性。多線程

Collection和Collections的區別
1.java.util.Collection 是一個集合接口(集合類的一個頂級接口)。它提供了對集合對象進行基本操做的通用接口方法。List、Set、Vector都繼承了他。
2.Collections則是集合類的一個工具類/幫助類,其中提供了一系列靜態方法,用於對集合中元素進行排序、搜索、線程安全等各類操做。併發

排序
void reverse(List list):反轉
void shuffle(List list),隨機排序
void sort(List list),按天然排序的升序排序
void sort(List list, Comparator c);定製排序,由Comparator控制排序邏輯
void swap(List list, int i , int j),交換兩個索引位置的元素
void rotate(List list, int distance),旋轉。當distance爲正數時,將list後distance個元素總體移到前面。當distance爲負數時,將 list的前distance個元素總體移到後面。ide

查找,替換操做
int binarySearch(List list, Object key), 對List進行二分查找,返回索引,注意List必須是有序的
int max(Collection coll),根據元素的天然順序,返回最大的元素。 類比int min(Collection coll)
int max(Collection coll, Comparator c),根據定製排序,返回最大元素,排序規則由Comparatator類控制。類比int min(Collection coll, Comparator c)
void fill(List list, Object obj),用元素obj填充list中全部元素
int frequency(Collection c, Object o),統計元素出現次數
int indexOfSubList(List list, List target), 統計targe在list中第一次出現的索引,找不到則返回-1,類比int lastIndexOfSubList(List source, list target).
boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替換舊元素。工具

同步控制
Collections.SynchronizedList()
Collections.SynchronizedSet()
Collections.synchronizedMap().net

備註:
2個數組求全集能夠轉成hashSet 交集能夠用Collections的retainAll 差集能夠用Collection的removeAll方法
參考:http://www.javashuo.com/article/p-cxunbgtf-dw.html線程

TreeSet和TreeMap的關係
  與HashSet徹底相似,TreeSet裏面絕大部分方法都是直接調用TreeMap方法來實現的。
相同點:

  • TreeMap和TreeSet都是非同步集合,都是線程不安全,可以使用方法Collections工具類方法來實現同步
  • 查詢速度都要比Hash集合慢,他們內部對元素的操做時間複雜度爲O(logN),而HashMap/HashSet則爲O(1)。
  • TreeMap和TreeSet都是有序的集合,也就是說他們存儲的值都是排好序的。
    不一樣點:
  • 最主要的區別就是TreeSet和TreeMap分別實現Set和Map接口
  • TreeSet只存儲一個對象,而TreeMap存儲兩個對象Key和Value(僅僅key對象有序)
  • TreeSet中不能有重複對象,而TreeMap中能夠存在
  • TreeMap的底層採用紅黑樹的實現,完成數據有序的插入,排序

參考:https://www.cnblogs.com/pony1223/p/7907173.html

PriorityQueu
https://www.cnblogs.com/Elliott-Su-Faith-change-our-life/p/7472265.html

相關文章
相關標籤/搜索