Java Set 中的常用方法示例總結(jié)
一、前言
Set 是 Java 集合框架(Collection Framework)中最常用的接口之一,具有 元素唯一、不允許重復(fù) 的特性。
無論你用 HashSet、LinkedHashSet、TreeSet,它們都實(shí)現(xiàn)了 Set 接口,因此擁有大量共同的方法。
這篇文章將全面總結(jié) Java Set 的常用方法并通過示例進(jìn)行講解,主要用于日常查詢使用。
二、Set 的核心特點(diǎn)回顧
- 不允許重復(fù)元素
- 無序(LinkedHashSet 有序,TreeSet 有序但基于排序)
- 無索引,不支持下標(biāo)訪問
- 判斷重復(fù)依賴:
hashCode() + equals()(TreeSet 使用 compareTo/Comparator)
三、Set 常用方法總覽
以下方法來自 Set 的父接口 Collection,因此所有 Set 實(shí)現(xiàn)類都具備這些操作:
| 方法 | 返回值 | 說明 |
|---|---|---|
add(E e) | boolean | 添加元素 |
remove(Object o) | boolean | 刪除指定元素 |
contains(Object o) | boolean | 判斷是否存在 |
size() | int | 獲取元素?cái)?shù)量 |
isEmpty() | boolean | 判斷是否為空 |
clear() | void | 清空集合 |
iterator() | Iterator | 返回迭代器 |
addAll(Collection c) | boolean | 合并集合 |
removeAll(Collection c) | boolean | 刪除多個(gè)元素 |
retainAll(Collection c) | boolean | 求交集 |
toArray() | Object[] | 轉(zhuǎn)換為數(shù)組 |
forEach() | void | 遍歷(Java 8+) |
接下來我們逐一講解。
四、Set 常用方法詳解
1.add(E e)—— 添加元素
Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Java"); // 重復(fù),添加失敗
System.out.println(set);返回值:
true:添加成功false:元素已存在(Set 不允許重復(fù))
2.remove(Object o)—— 刪除元素
set.remove("Java");
System.out.println(set);
3.contains(Object o)—— 判斷元素是否存在
boolean exists = set.contains("Java");
System.out.println(exists);
最常用于過濾、查重等場景。
4.size()—— 獲取元素?cái)?shù)量
int count = set.size(); System.out.println(count);
5.isEmpty()—— 判斷集合是否為空
if (set.isEmpty()) {
System.out.println("空集合");
}
6.clear()—— 清空集合
set.clear();
7.iterator()—— 迭代器遍歷
Iterator<String> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
Set 無索引,因此迭代器非常重要。
8.forEach()(Java 8)
更簡潔的遍歷方式:
set.forEach(System.out::println);
9.addAll(Collection c)—— 合并集合
Set<Integer> a = new HashSet<>(List.of(1, 2)); Set<Integer> b = new HashSet<>(List.of(2, 3)); a.addAll(b); System.out.println(a);
效果類似數(shù)學(xué)中的 并集。
10.removeAll(Collection c)—— 刪除多個(gè)元素
a.removeAll(List.of(2)); System.out.println(a);
效果類似數(shù)學(xué)中的 差集。
11.retainAll(Collection c)—— 求交集
保留與目標(biāo)集合相同的元素。
Set<Integer> a = new HashSet<>(List.of(1, 2, 3)); Set<Integer> b = new HashSet<>(List.of(2, 3, 4)); a.retainAll(b); System.out.println(a); // [2, 3]
12.toArray()—— 轉(zhuǎn)換為數(shù)組
Object[] arr = set.toArray();
如果你需要指定類型:
String[] arr = set.toArray(new String[0]);
五、Set 常用操作總結(jié)(??迹?/h2>
1. 去重操作
Set<Integer> set = new HashSet<>(list);
2. 判斷是否包含某元素
if (set.contains(x))
3. 交集、并集、差集
// 并集 a.addAll(b); // 交集 a.retainAll(b); // 差集 a.removeAll(b);
4. 遍歷(推薦方式)
set.forEach(System.out::println);
六、Set 使用注意事項(xiàng)(易踩坑)
? 1. 添加自定義對象時(shí)必須重寫 equals() 和 hashCode()
否則 Set 無法正確判斷重復(fù)。
? 2. 遍歷過程中不能使用普通 for(因?yàn)闊o索引)
只能:
- for-each
- iterator
- stream
? 3. HashSet 不保證順序
如果需要順序:
? LinkedHashSet
如果需要排序:
? TreeSet
七、三大 Set 類的額外方法(補(bǔ)充)
- TreeSet 擁有
first()、last()方法
TreeSet<Integer> ts = new TreeSet<>(); ts.add(3); ts.add(1); ts.add(2); System.out.println(ts.first()); // 1 System.out.println(ts.last()); // 3
- TreeSet 支持子集操作
ts.headSet(2); // 小于 2 的元素 ts.tailSet(2); // 大于等于 2 的元素 ts.subSet(1, 3); // [1,3)
參考資料
到此這篇關(guān)于Java Set 中的常用方法示例總結(jié)的文章就介紹到這了,更多相關(guān)java set常用方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于JAVA中stream流的基礎(chǔ)處理(獲取對象字段和對象批量處理等)
這篇文章主要介紹了關(guān)于JAVA中stream流的基礎(chǔ)處理,包含獲取對象字段、按字段排序、按字段去重、對象批量處理、指定字段轉(zhuǎn)數(shù)組等內(nèi)容,需要的朋友可以參考下2023-03-03
java token生成和校驗(yàn)的實(shí)例代碼
這篇文章主要介紹了java token生成和校驗(yàn)的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Springboot+Spring Security實(shí)現(xiàn)前后端分離登錄認(rèn)證及權(quán)限控制的示例代碼
本文主要介紹了Springboot+Spring Security實(shí)現(xiàn)前后端分離登錄認(rèn)證及權(quán)限控制的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
使用Java橋接模式打破繼承束縛優(yōu)雅實(shí)現(xiàn)多維度變化
這篇文章主要為大家介紹了使用Java橋接模式打破繼承束縛,優(yōu)雅實(shí)現(xiàn)多維度變化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Java Netty實(shí)現(xiàn)心跳機(jī)制過程解析
這篇文章主要介紹了Java Netty實(shí)現(xiàn)心跳機(jī)制過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Java實(shí)現(xiàn)JWT登錄認(rèn)證的示例代碼
Java中我們可以使用諸如JJWT這樣的庫來生成和驗(yàn)證JWT,本文主要介紹了Java實(shí)現(xiàn)JWT登錄認(rèn)證的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
十五道tomcat面試題,為數(shù)不多的機(jī)會(huì)!
這篇文章主要介紹了十五道tomcat面試題,Tomcat的本質(zhì)是一個(gè)Servlet容器。一個(gè)Servlet能做的事情是:處理請求資源,并為客戶端填充response對象,需要的朋友可以參考下2021-08-08

