簡單闡述
參考操作數組的工具類:Arrays,Collections 是一個操作 Set、List 和 Map 等集合的工具類。
常用方法
Collections 中提供了一系列靜態的方法對集合元素進行排序、查詢和修改等操作,還提供了對集合對象設置不可變、對集合對象實現同步控制等方法(均為static方法):
排序操作:
- reverse(List):反轉 List 中元素的順序
- shuffle(List):對 List 集合元素進行隨機排序
- sort(List):根據元素的自然順序對指定 List 集合元素按升序排序
- sort(List,Comparator):根據指定的 Comparator 產生的順序對 List 集合元素進行排序
- swap(List,int, int):將指定 list 集合中的 i 處元素和 j 處元素進行交換
查找
- Object max(Collection):根據元素的自然順序,返回給定集合中的最大元素
- Object max(Collection,Comparator):根據 Comparator 指定的順序,返回給定集合中的最大元素
- Object min(Collection):根據元素的自然順序,返回給定集合中的最小元素
- Object min(Collection,Comparator):根據 Comparator 指定的順序,返回給定集合中的最小元素
- int binarySearch(List list,T key)在List集合中查找某個元素的下標,但是List的元素必須是T或T的子類對象,而且必須是可比較大小的,即支持自然排序的。而且集合也事先必須是有序的,否則結果不確定。
- int binarySearch(List list,T key,Comparator c)在List集合中查找某個元素的下標,但是List的元素必須是T或T的子類對象,而且集合也事先必須是按照c比較器規則進行排序過的,否則結果不確定。
- int frequency(Collection c,Object o):返回指定集合中指定元素的出現次數
復制、替換
- void copy(List dest,List src):將src中的內容復制到dest中
- boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替換 List 對象的所有舊值
- 提供了多個**unmodifiableXxx()**方法,該方法返回指定 Xxx的不可修改的視圖。
添加
- boolean addAll(Collection c,T… elements)將所有指定元素添加到指定 collection 中。
同步
- Collections 類中提供了多個 synchronizedXxx() 方法,該方法可使將指定集合包裝成線程同步的集合,從而可以解決多線程并發訪問集合時的線程安全問題:
Vector 和 Hashtable都是古老的類,都是線程安全類,但是效率比ArrayList和HashMap低。
需要創建線程安全的List實現類,也無需使用Vector 實現類
需要創建線程安全的Map實現類,也無需使用Hashtable實現類。
可以使用Collections工具類把HashMap變成線程安全的。
Collections類提供了多個synchronizedXxx()方法,該方法可以將指定集合包裝成線程同步的集合,從而可以解決多線程并發訪問集合時的線程安全問題。
Java中常用的集合框架的實現類HashSet、TreeSet、ArrayList、ArrayDeque、LinkedList、HashMap和TreeMap都是線程不安全的。如果有多個線程試圖修改它們,Collections提供了多個類方法可以把它們包裝成線程安全的集合。
//使用Collections工具類將常用的集合實現類變成線程安全的!
Collection c = Collections.synchronizedCollection(new ArrayList());
List list = Collections.synchronizedList(new ArrayList());
Set s = Collections.synchroniezedSet(new HashSet());
Map m = Collections.synchronizedMap(new HashMap());
經典面試題:Collection和Collections的區別?
Collection 是一個接口,它是Java集合框架的一部分。
它提供了一系列的方法來操作一組對象,比如添加、移除、遍歷等。
Collection 接口是各種集合類(如 List, Set, Queue 等)的父接口。
它不提供直接的實現,而是通過其子接口和實現類(如 ArrayList, HashSet, LinkedList 等)提供具體的功能。
Collections 是一個包含靜態方法的工具類,這些方法用于操作或返回集合。
它提供了各種對集合操作的工具方法,比如排序 (sort), 反轉 (reverse), 查找 (binarySearch) 等。
它主要用于提供對各種集合的通用操作,而不是表示一組對象。
In a word,Collection 是一個用于定義操作一組對象的接口,而 Collections 是一個提供靜態方法以操作集合的工具類。