Java Set 中的常用方法示例總結(jié)
一、前言
Set 是 Java 集合框架(Collection Framework)中最常用的接口之一,具有 元素唯一、不允許重復(fù) 的特性。
無(wú)論你用 HashSet、LinkedHashSet、TreeSet,它們都實(shí)現(xiàn)了 Set 接口,因此擁有大量共同的方法。
這篇文章將全面總結(jié) Java Set 的常用方法并通過(guò)示例進(jìn)行講解,主要用于日常查詢(xún)使用。
二、Set 的核心特點(diǎn)回顧
- 不允許重復(fù)元素
- 無(wú)序(LinkedHashSet 有序,TreeSet 有序但基于排序)
- 無(wú)索引,不支持下標(biāo)訪問(wèn)
- 判斷重復(fù)依賴(lài):
hashCode() + equals()(TreeSet 使用 compareTo/Comparator)
三、Set 常用方法總覽
以下方法來(lái)自 Set 的父接口 Collection,因此所有 Set 實(shí)現(xiàn)類(lèi)都具備這些操作:
| 方法 | 返回值 | 說(shuō)明 |
|---|---|---|
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+) |
接下來(lái)我們逐一講解。
四、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);
最常用于過(guò)濾、查重等場(chǎng)景。
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 無(wú)索引,因此迭代器非常重要。
8.forEach()(Java 8)
更簡(jiǎn)潔的遍歷方式:
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);
效果類(lèi)似數(shù)學(xué)中的 并集。
10.removeAll(Collection c)—— 刪除多個(gè)元素
a.removeAll(List.of(2)); System.out.println(a);
效果類(lèi)似數(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();
如果你需要指定類(lèi)型:
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. 添加自定義對(duì)象時(shí)必須重寫(xiě) equals() 和 hashCode()
否則 Set 無(wú)法正確判斷重復(fù)。
? 2. 遍歷過(guò)程中不能使用普通 for(因?yàn)闊o(wú)索引)
只能:
- for-each
- iterator
- stream
? 3. HashSet 不保證順序
如果需要順序:
? LinkedHashSet
如果需要排序:
? TreeSet
七、三大 Set 類(lèi)的額外方法(補(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
hibernate 命名查詢(xún)?nèi)绾螌?shí)現(xiàn)
Hibernate允許在映射文件中定義字符串形式的查詢(xún)語(yǔ)句,這種查詢(xún)方式成為命名查詢(xún),需要的朋友可以參考下2012-11-11
struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25開(kāi)發(fā)環(huán)境搭建圖文
這篇文章主要介紹了struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25開(kāi)發(fā)環(huán)境搭建圖文教程,感興趣的小伙伴們可以參考一下2016-06-06
java網(wǎng)絡(luò)編程學(xué)習(xí)java聊天程序代碼分享
java聊天程序代碼分享,大家參考使用吧2013-12-12
SpringBoot根據(jù)注解動(dòng)態(tài)執(zhí)行類(lèi)中的方法實(shí)現(xiàn)
本文主要介紹了SpringBoot根據(jù)注解動(dòng)態(tài)執(zhí)行類(lèi)中的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
SpringBoot 整合 Apache Tika提取數(shù)據(jù)的具體操作
Apache Tika?是一個(gè)功能強(qiáng)大的內(nèi)容分析工具,它能夠從多種文件格式中提取文本、元數(shù)據(jù)以及其他結(jié)構(gòu)化信息,本文介紹了SpringBoot整合ApacheTika進(jìn)行文件內(nèi)容提取和數(shù)據(jù)泄露防護(hù)的實(shí)現(xiàn),感興趣的朋友一起看看吧2025-02-02
基于SpringBoot實(shí)現(xiàn)郵箱找回密碼的代碼示例
本文主要介紹了如何基于SpringBoot實(shí)現(xiàn)郵箱找回密碼,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
SpringBoot整合mybatis使用Druid做連接池的方式
這篇文章主要介紹了SpringBoot整合mybatis使用Druid做連接池的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08

