Java基礎之集合Set詳解
一、概述
Set是Java中的集合類,提供瞭一種無順序,不重復的集合。常用的子類包括HashSet, TreeSet等。
- HashSet底層使用HashMap實現,根據元素的hashCode和equals來判斷是否為重復元素。當元素的hashCode相同且equals返回true時則認為是重復元素。因為使用瞭hash算法所以HashSet有很好的添加和訪問性能。可以放入null但隻能放一個null
- TreeSet底層使用紅黑樹實現,Set上的元素被放在一個自動排序的紅黑樹中。不能放入null
二、Set的常用方法
- add() 向Set中添加元素
- size() 返加Set的大小,即Set中元素的數量
- remove(Object o) 從Set上刪除元素
- boolean contains(Object o) 檢查Set中是否包含某個元素,包含返回true,不包含返回false
- iterator() 返回Set的迭代器
- clear() 清空Setis
- Empty() 檢查Set是否為空,為空返回true, 否則返回false
package collect; import java.util.HashSet; import java.util.Set; /** * [簡要描述]:Set使用 * [詳細描述]: * * @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); //再加入一個王五,不能添加成功 boolean rst = set.add("王五"); System.out.println("添加結果:" + rst); System.out.println(set); //HashSet可以加入null,但隻能加入一個null rst = set.add(null); System.out.println("添加第一個null:" + rst); System.out.println(set); rst = set.add(null); System.out.println("添加第二個null:" + rst); System.out.println(set); //判斷Set中是否包含某個元素 rst = set.contains("張三"); System.out.println("是否包含元素\"張三\":" + rst); //刪除元素 set.remove("張三"); System.out.println(set); //判斷Set中是否包含某個元素 rst = set.contains("張三"); System.out.println("是否包含元素\"張三\":" + rst); //Set的大小,即Set中元素的數量 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); } }
運行結果:
[李四, 張三, 王五]
添加結果:false
[李四, 張三, 王五]
添加第一個null:true
[null, 李四, 張三, 王五]
添加第二個null:false
[null, 李四, 張三, 王五]
是否包含元素”張三”:true
[null, 李四, 王五]
是否包含元素”張三”:false
Set的大小:3
Set是否為空:false
[]
Set是否為空:true
註:TreeSet不能添加null元素,添加null時會拋出NullPointerException異常
package collect; import java.util.Set; import java.util.TreeSet; /** * [簡要描述]: Set * [詳細描述]: * * @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("添加第一個null:" + rst); System.out.println(set); } }
運行結果:
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; /** * [簡要描述]: Set * [詳細描述]: * * @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); //再加入一個王五,不能添加成功 boolean rst = set.add("王五"); System.out.println("添加結果:" + rst); System.out.println(set); //獲取Set中的第一個元素 System.out.println(set.first()); //獲取Set中的最後一個元素 System.out.println(set.last()); //判斷Set中是否包含某個元素 rst = set.contains("張三"); System.out.println("是否包含元素\"張三\":" + rst); //刪除元素 set.remove("張三"); System.out.println(set); //判斷Set中是否包含某個元素 rst = set.contains("張三"); System.out.println("是否包含元素\"張三\":" + rst); //Set的大小,即Set中元素的數量 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); } }
運行結果:
[A, B, a, 張三, 李四, 王五]
添加結果:false
[A, B, a, 張三, 李四, 王五]
A
王五
是否包含元素”張三”:true
[A, B, a, 李四, 王五]
是否包含元素”張三”:false
Set的大小:5
Set是否為空:false
[]
Set是否為空:true
三、Set的遍歷
3.1增強for循環
package collect; import java.util.HashSet; import java.util.Set; /** * [簡要描述]:增強for循環遍歷Set * [詳細描述]: * * @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); } } }
運行結果:
[豬悟能, 孫悟空, 沙悟凈, 唐僧]
豬悟能
孫悟空
沙悟凈
唐僧
3.2 迭代器遍歷
package collect; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * [簡要描述]:增強for循環遍歷Set * [詳細描述]: * * @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()); } } }
運行結果:
[豬悟能, 孫悟空, 沙悟凈, 唐僧]
豬悟能
孫悟空
沙悟凈
唐僧
到此這篇關於Java基礎之集合Set詳解的文章就介紹到這瞭,更多相關Java集合Set內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java十分鐘精通集合的使用與原理下篇
- Java 深入淺出掌握Collection單列集合Set
- 一篇文章帶你入門java集合
- 一文掌握Java中List和Set接口的基本使用
- Java集合TreeSet用法詳解