Java基礎(chǔ)之集合Set詳解
一、概述
Set是Java中的集合類,提供了一種無(wú)順序,不重復(fù)的集合。常用的子類包括HashSet, TreeSet等。
- HashSet底層使用HashMap實(shí)現(xiàn),根據(jù)元素的hashCode和equals來(lái)判斷是否為重復(fù)元素。當(dāng)元素的hashCode相同且equals返回true時(shí)則認(rèn)為是重復(fù)元素。因?yàn)槭褂昧薶ash算法所以HashSet有很好的添加和訪問(wèn)性能。可以放入null但只能放一個(gè)null
- TreeSet底層使用紅黑樹(shù)實(shí)現(xiàn),Set上的元素被放在一個(gè)自動(dòng)排序的紅黑樹(shù)中。不能放入null
二、Set的常用方法
- add() 向Set中添加元素
- size() 返加Set的大小,即Set中元素的數(shù)量
- remove(Object o) 從Set上刪除元素
- boolean contains(Object o) 檢查Set中是否包含某個(gè)元素,包含返回true,不包含返回false
- iterator() 返回Set的迭代器
- clear() 清空Setis
- Empty() 檢查Set是否為空,為空返回true, 否則返回false
package collect; import java.util.HashSet; import java.util.Set; /** * [簡(jiǎn)要描述]:Set使用 * [詳細(xì)描述]: * * @author Smalight Lv * @version 1.0, 2021/5/6 15:15 * @since JDK 1.8 */ public class SetTest1 { public static void main(String[] args) { Set<String> set = new HashSet<>(); //添加元素到Set set.add("張三"); set.add("李四"); set.add("王五"); //打印Set System.out.println(set); //再加入一個(gè)王五,不能添加成功 boolean rst = set.add("王五"); System.out.println("添加結(jié)果:" + rst); System.out.println(set); //HashSet可以加入null,但只能加入一個(gè)null rst = set.add(null); System.out.println("添加第一個(gè)null:" + rst); System.out.println(set); rst = set.add(null); System.out.println("添加第二個(gè)null:" + rst); System.out.println(set); //判斷Set中是否包含某個(gè)元素 rst = set.contains("張三"); System.out.println("是否包含元素\"張三\":" + rst); //刪除元素 set.remove("張三"); System.out.println(set); //判斷Set中是否包含某個(gè)元素 rst = set.contains("張三"); System.out.println("是否包含元素\"張三\":" + rst); //Set的大小,即Set中元素的數(shù)量 int size = set.size(); System.out.println("Set的大?。? + size); //判斷Set是否為空 boolean isEmpty = set.isEmpty(); System.out.println("Set是否為空:" + isEmpty); //清空Set set.clear(); System.out.println(set); //判斷Set是否為空 isEmpty = set.isEmpty(); System.out.println("Set是否為空:" + isEmpty); } }
運(yùn)行結(jié)果:
[李四, 張三, 王五]
添加結(jié)果:false
[李四, 張三, 王五]
添加第一個(gè)null:true
[null, 李四, 張三, 王五]
添加第二個(gè)null:false
[null, 李四, 張三, 王五]
是否包含元素"張三":true
[null, 李四, 王五]
是否包含元素"張三":false
Set的大?。?
Set是否為空:false
[]
Set是否為空:true
注:TreeSet不能添加null元素,添加null時(shí)會(huì)拋出NullPointerException異常
package collect; import java.util.Set; import java.util.TreeSet; /** * [簡(jiǎn)要描述]: Set * [詳細(xì)描述]: * * @author Smalight Lv * @version 1.0, 2021/5/6 16:28 * @since JDK 1.8 */ public class SetTest2 { public static void main(String[] args) { Set<String> set = new TreeSet<>(); //TreeSet不能加入null boolean rst = set.add(null); System.out.println("添加第一個(gè)null:" + rst); System.out.println(set); } }
運(yùn)行結(jié)果:
Exception in thread "main" java.lang.NullPointerException
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
at collect.SetTest2.main(SetTest2.java:19)
package collect; import java.util.TreeSet; /** * [簡(jiǎn)要描述]: Set * [詳細(xì)描述]: * * @author Smalight Lv * @version 1.0, 2021/5/6 16:28 * @since JDK 1.8 */ public class SetTest3 { public static void main(String[] args) { TreeSet<String> set = new TreeSet<>(); //添加元素到Set set.add("B"); set.add("A"); set.add("李四"); set.add("王五"); set.add("張三"); set.add("a"); //打印Set System.out.println(set); //再加入一個(gè)王五,不能添加成功 boolean rst = set.add("王五"); System.out.println("添加結(jié)果:" + rst); System.out.println(set); //獲取Set中的第一個(gè)元素 System.out.println(set.first()); //獲取Set中的最后一個(gè)元素 System.out.println(set.last()); //判斷Set中是否包含某個(gè)元素 rst = set.contains("張三"); System.out.println("是否包含元素\"張三\":" + rst); //刪除元素 set.remove("張三"); System.out.println(set); //判斷Set中是否包含某個(gè)元素 rst = set.contains("張三"); System.out.println("是否包含元素\"張三\":" + rst); //Set的大小,即Set中元素的數(shù)量 int size = set.size(); System.out.println("Set的大?。? + size); //判斷Set是否為空 boolean isEmpty = set.isEmpty(); System.out.println("Set是否為空:" + isEmpty); //清空Set set.clear(); System.out.println(set); //判斷Set是否為空 isEmpty = set.isEmpty(); System.out.println("Set是否為空:" + isEmpty); } }
運(yùn)行結(jié)果:
[A, B, a, 張三, 李四, 王五]
添加結(jié)果:false
[A, B, a, 張三, 李四, 王五]
A
王五
是否包含元素"張三":true
[A, B, a, 李四, 王五]
是否包含元素"張三":false
Set的大?。?
Set是否為空:false
[]
Set是否為空:true
三、Set的遍歷
3.1增強(qiáng)for循環(huán)
package collect; import java.util.HashSet; import java.util.Set; /** * [簡(jiǎn)要描述]:增強(qiáng)for循環(huán)遍歷Set * [詳細(xì)描述]: * * @author Smalight Lv * @version 1.0, 2021/5/6 17:01 * @since JDK 1.8 */ public class SetTest4 { public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("唐僧"); set.add("孫悟空"); set.add("豬悟能"); set.add("沙悟凈"); System.out.println(set); for(String item:set){ System.out.println(item); } } }
運(yùn)行結(jié)果:
[豬悟能, 孫悟空, 沙悟凈, 唐僧]
豬悟能
孫悟空
沙悟凈
唐僧
3.2 迭代器遍歷
package collect; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * [簡(jiǎn)要描述]:增強(qiáng)for循環(huán)遍歷Set * [詳細(xì)描述]: * * @author Smalight Lv * @version 1.0, 2021/5/6 17:01 * @since JDK 1.8 */ public class SetTest5 { public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("唐僧"); set.add("孫悟空"); set.add("豬悟能"); set.add("沙悟凈"); System.out.println(set); Iterator<String> iterator = set.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } } }
運(yùn)行結(jié)果:
[豬悟能, 孫悟空, 沙悟凈, 唐僧]
豬悟能
孫悟空
沙悟凈
唐僧
到此這篇關(guān)于Java基礎(chǔ)之集合Set詳解的文章就介紹到這了,更多相關(guān)Java集合Set內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC配置javaConfig及StringHttpMessageConverter示例
這篇文章主要介紹了SpringMVC配置javaConfig及StringHttpMessageConverter實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07SpringBoot使用注解進(jìn)行分頁(yè)的實(shí)現(xiàn)示例
分頁(yè)使用可以說(shuō)非常普遍了,有時(shí)候會(huì)需要非常靈活的方式去開(kāi)啟或關(guān)閉分頁(yè),嘗試使用一下注解的方式來(lái)進(jìn)行分頁(yè),本文主要介紹了SpringBoot使用注解進(jìn)行分頁(yè)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03關(guān)于mybatis mapper類注入失敗的解決方案
這篇文章主要介紹了關(guān)于mybatis mapper類注入失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法(二)
這篇文章主要介紹了SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法(二),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10解決mybatis plus 駝峰式命名規(guī)則問(wèn)題
這篇文章主要介紹了解決mybatis plus 駝峰式命名規(guī)則,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Spring Boot Admin郵件警報(bào)整合過(guò)程解析
這篇文章主要介紹了Spring Boot Admin郵件警報(bào)整合過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java實(shí)現(xiàn)銀行ATM系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04