本文將為大家詳細講解Java中Collection與Collections的區別點,這是我們進行開發時經常用到的知識點,也是大家在學習Java中很重要的一個知識點,更是我們在面試時有可能會問到的問題!
文章較長,干貨滿滿,建議大家收藏慢慢學習,文末有本文重點總結,主頁有全系列文章分享,技術類問題,歡迎大家和我們一起交流討論!
前言
截止到現在我們已經把 Java里的List、SET和Map 這三大集合都給大家講解完畢了,不知道各位掌握了多少呢?如果你對之前的內容還沒有熟練掌握,可以把前面的文章再多讀幾遍,如果你已經掌握的很好了,那就繼續閱讀今天的內容吧,今天會再用一篇文章,把集合中遺漏的內容給大家梳理一下,比如Collection與Collections的區別,
全文大約 【3300】 字,不說廢話,只講可以讓你學到技術、明白原理的純干貨!本文帶有豐富的案例及配圖視頻,讓你更好地理解和運用文中的技術概念,并可以給你帶來具有足夠啟迪的思考...
一. 知識回顧
1. Java集合體系
根據前面給大家講解的內容可知,Java的集合整體上可以分為 Collection 和 Map 兩大體系,而從這兩大體系中又可以延伸細分為 3個子型別:
List-串列
Set-集
Map-映射
從整體上來看,這幾種集合之間的關系如下圖所示:
2. 集合的關系圖譜
另外集合的各個介面和類之間除了有共同之處,它們也有一些各自的特點,我們可以看看下面這個集合的關系圖譜:
在上圖中,有3個核心API需要我們掌握:
- Iterator: 我們可以通過迭代器遍歷集合中的資料;
- Collection: Collection是List、Set、Queue 這3種集合的父級介面;
- Map: Map是映射表的父級介面,
為了讓大家加深印象,接下來我們再單獨復習一下Collection介面是怎么回事,
二. Collection
1. 簡介
Collection是Java集合框架中的一個介面,它定義了一組用于存盤、訪問和操作物件的方法,
它是Java集合框架中的基礎介面之一,我們常用的很多集合類都實作了Collection介面或其子介面(如List、Set、Queue等),
2. 核心方法
Collection介面中定義了一系列用于操作集合的通用核心方法,包括添加、洗掉、遍歷、查找等,Collection的各個子類都需要實作這些方法,下面是一些常用的Collection介面方法:
- add(E e) :將元素e添加到集合中;
- remove(Object o) :從集合中洗掉物件o;
- contains(Object o) :判斷集合中是否包含物件o;
- size() :回傳集合中元素的個數;
- iterator() :回傳集合中元素的迭代器,
通過這些方法,我們可以輕松地操作集合中的元素,實作各種常用的功能,
二. Collections
1. 簡介
Collections是Java集合框架為了方便我們進行集合開發,為我們提供的一個 操作Set、List和Map等集合的 工具類, 位于java.util包中 ,該類提供了一系列的靜態方法,可以實作對集合進行排序、查找、替換、復制等操作,Collections類中的方法都是靜態方法,不需要創建其物件即可使用,
利用Collections類,我們可以對集合進行一些高級的操作,比如對集合進行排序、查找最大值、查找最小值等,總之,Collections類中提供的方法,可以幫助我們簡化代碼,提高開發效率,
2. 常用方法
Collections類中為我們提供的方法其實有很多,大致可以分為以下幾類:
- 創建空白集合: emptyList()、emptyMap()、emptySet():回傳對應的不可變的空集合,無法向其中添加或洗掉元素;
- 創建單個元素的集合:singletonList(T o)、singletonMap(K key, V value)、singleton(T o):回傳的是不可變的單元素集合,無法向其中添加或洗掉元素;
- 排序方法:sort、reverse、shuffle、swap、rotate;
- 查找方法:binarySearch;
- 替換方法:replaceAll、fill;
- 復制方法:copy;
- 同步方法:synchronizedCollection、synchronizedList、synchronizedMap等;
- 不可修改方法:unmodifiableCollection、unmodifiableList、unmodifiableMap等;
- 其他方法:frequency、max、min、disjoint、frequency、indexOfSubList、lastIndexOfSubList等,
接下來我們就通過幾個案例,來教大家學會這些方法該如何使用,
3. 基本使用
3.1 排序方法
Collections類給我們提供了好幾個排序方法,比如sort()、reverse()、shuffle() 等,用于對集合進行排序,
3.1.1 sort方法
sort(List
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Demo19 {
public static void main(String[] args) {
//Collections的使用--排序方法
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(2);
//呼叫Collections的sort()排序方法---升序
Collections.sort(list);
System.out.println(list); // [1, 2, 3]
}
}
3.1.2 reverse方法
reverse(List
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Demo19 {
public static void main(String[] args) {
//Collections的使用--排序方法
//呼叫Collections的reverse()排序方法--反轉排序
List<Integer> list2 = new ArrayList<>();
list2.add(1);
list2.add(2);
list2.add(3);
Collections.reverse(list2);
System.out.println(list2); // [3, 2, 1]
}
}
3.1.3 shuffle方法
shuffle(List
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Demo19 {
public static void main(String[] args) {
//Collections的使用--排序方法
//呼叫Collections的shuffle()排序方法--隨機
List<Integer> list3 = new ArrayList<>();
list3.add(1);
list3.add(2);
list3.add(3);
Collections.shuffle(list3);
System.out.println(list3); // [2, 1, 3]
}
}
3.2 查找方法
Collections類也給我們提供了用于對集合進行二分查找的 binarySearch(List<? extends Comparable<? super T>> list, T key) 方法,該方法用于在有序集合中根據二分查找法,來查找到指定的元素,并回傳元素在集合中的索引,如果指定元素不在集合中,則回傳一個負數,表示應該插入該元素的位置, binarySearch()方法案例如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Demo20 {
public static void main(String[] args) {
//Collections的使用--查找方法
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//二分查找
int index = Collections.binarySearch(list, 2);
System.out.println(index); // 1
}
}
3.3 替換方法
Collections類給我們提供了一些用于替換的方法,比如replaceAll()、fill(),用于對集合進行替換,
3.3.1 replaceAll()方法
replaceAll(List
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Demo21 {
public static void main(String[] args) {
//Collections的使用--替換方法
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//替換方法
Collections.replaceAll(list, 2, 4);
System.out.println(list); // [1, 4, 3]
}
}
3.3.2 fill()方法
fill(List<? super T> list, T obj)方法用于用指定元素填充List集合,例如:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Demo21 {
public static void main(String[] args) {
//Collections的使用--替換方法
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//指定元素填充List集合
Collections.fill(list, 0);
System.out.println(list); // [0, 0, 0]
}
}
3.4 同步方法
Collections類提供了一些同步方法,如 synchronizedCollection()、synchronizedList()、synchronizedMap() 等,用于對集合進行同步處理,這可以保證多執行緒環境下的并發安全,
3.4.1 synchronizedCollection方法
synchronizedCollection(Collection
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Demo22 {
public static void main(String[] args) {
//Collections的使用--同步方法
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//將指定集合轉換為執行緒安全的集合
Collection<Integer> synchronizedList = Collections.synchronizedCollection(list);
System.out.println("list="+synchronizedList);
}
}
3.4.2 synchronizedList方法
synchronizedList(List
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Demo22 {
public static void main(String[] args) {
//Collections的使用--同步方法
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//將指定的List集合轉換為執行緒安全的List集合
List<Integer> synchronizedList = Collections.synchronizedList(list);
System.out.println("list2="+synchronizedList);
}
}
3.4.3 synchronizedSet方法
synchronizedSet(Set
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Demo22 {
public static void main(String[] args) {
//Collections的使用--同步方法
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
//將指定的Set集合轉換為執行緒安全的Set集合
Set<Integer> synchronizedSet = Collections.synchronizedSet(set);
System.out.println("set="+synchronizedSet);
}
}
3.4.4 synchronizedMap方法
synchronizedMap(Map<K,V> m) 方法用于將指定的Map集合轉換為執行緒安全的Map集合,例如:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Demo22 {
public static void main(String[] args) {
//Collections的使用--同步方法
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
//將指定的Map集合轉換為執行緒安全的Map集合
Map<String, Integer> synchronizedMap = Collections.synchronizedMap(map);
System.out.println("map="+synchronizedMap);
}
}
3.5 其他方法
我們可以使用max()和min()
方法分別輸出集合中的最大和最小值,用frequency()
方法統計某個資料在集合中出現的次數,
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Demo23 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(100);
list.add(-2);
list.add(88);
list.add(88);
//查找集合中的最大值
System.out.println("max="+Collections.max(list));
//查找集合中的最小值
System.out.println("min="+Collections.min(list));
//判斷88在List集合中出現的次數,回傳2
System.out.println(Collections.frequency(list, 88));
}
}
我們也可以使用Collections的copy()
靜態方法,將指定集合中的所有元素復制到另一個集合中,執行copy()
方法后,目標集合中每個已復制元素的索引,將等同于源集合中該元素的索引,
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Demo23 {
public static void main(String[] args) {
List<Integer> srcList = new ArrayList<>();
srcList.add(10);
srcList.add(88);
srcList.add(100);
List<Integer> destList = new ArrayList<>();
destList.add(-1);
destList.add(0);
destList.add(1);
//呼叫copy()方法,將srcList集合中的元素復制到destList集合中
// java.lang.IndexOutOfBoundsException: Source does not fit in dest
//destList表示目標集合物件,srcList表示源集合物件,
Collections.copy(destList, srcList);
System.out.println(destList);
}
}
我們要注意: 目標集合的長度至少要和源集合的長度相同,如果目標集合的長度更長,則不影響目標集合中的其余元素,如果目標集合的長度不夠而無法包含整個源集合元素,程式會拋出 IndexOutOfBoundsException
例外,
除了以上這些方法,還有其他的一些方法,比如將一個集合變成不可變的集合,用于對集合進行保護等,就不再一一給大家展示其用法了,
這些方法基本上就是見名知意,大家根據名稱呼叫就可以,非常的簡單,總之,希望大家可以熟練掌握Collections
類的使用方法,這對于Java開發人員來說是非常重要的,
三. Collection與Collections的區別
綜上所述,就可以把Collection與Collections的區別給大家總結出來了,Collection和Collections雖然名字很相似,但它們的作用和用法完全不同,其核心區別如下:
Collection是Java集合框架中的一個介面,定義了一組用于存盤、訪問和操作物件的方法,它是所有集合類的基礎介面之一;
Collections是Java集合框架中的一個工具類,提供了一系列的靜態方法,方便我們對集合進行排序、查找、替換等操作,它是一個類,而不是一個介面,
簡單來說,Collection是一個介面,是Java集合框架中的基礎介面之一;而Collections是一個工具類,提供了一系列靜態方法,用于對集合進行高級操作,
四. 結語
至此,就把今天的內容講解完畢了,我相信大家也已經明白了Collection與Collections的區別了,那么今天的核心內容,就是下面這些了:
Collection是Java集合的基礎介面,List、Set等都繼承自該介面;
Collections是操作集合的工具類,里面有若干個操作集合的方法;
你要熟練使用Collections里的幾個常用方法哦,
以上就是本文的全部內容啦,大家有技術類問題,歡迎和我們一起交流討論~
更多技術類干貨,關注我!
我是專門分享技術干貨的分享君!
視頻配套資料:戳這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/553695.html
標籤:其他
下一篇:返回列表