一、概述
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内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!