经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java基础之集合Set详解
来源:jb51  时间:2021/5/10 11:20:36  对本文有异议

一、概述

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
  1. package collect;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. /**
  7. * [简要描述]:Set使用
  8. * [详细描述]:
  9. *
  10. * @author Smalight Lv
  11. * @version 1.0, 2021/5/6 15:15
  12. * @since JDK 1.8
  13. */
  14. public class SetTest1 {
  15. public static void main(String[] args) {
  16. Set<String> set = new HashSet<>();
  17.  
  18. //添加元素到Set
  19. set.add("张三");
  20. set.add("李四");
  21. set.add("王五");
  22.  
  23. //打印Set
  24. System.out.println(set);
  25.  
  26. //再加入一个王五,不能添加成功
  27. boolean rst = set.add("王五");
  28. System.out.println("添加结果:" + rst);
  29. System.out.println(set);
  30.  
  31. //HashSet可以加入null,但只能加入一个null
  32. rst = set.add(null);
  33. System.out.println("添加第一个null:" + rst);
  34. System.out.println(set);
  35. rst = set.add(null);
  36. System.out.println("添加第二个null:" + rst);
  37. System.out.println(set);
  38.  
  39. //判断Set中是否包含某个元素
  40. rst = set.contains("张三");
  41. System.out.println("是否包含元素\"张三\":" + rst);
  42.  
  43. //删除元素
  44. set.remove("张三");
  45. System.out.println(set);
  46.  
  47. //判断Set中是否包含某个元素
  48. rst = set.contains("张三");
  49. System.out.println("是否包含元素\"张三\":" + rst);
  50.  
  51. //Set的大小,即Set中元素的数量
  52. int size = set.size();
  53. System.out.println("Set的大小:" + size);
  54.  
  55. //判断Set是否为空
  56. boolean isEmpty = set.isEmpty();
  57. System.out.println("Set是否为空:" + isEmpty);
  58.  
  59. //清空Set
  60. set.clear();
  61. System.out.println(set);
  62.  
  63. //判断Set是否为空
  64. isEmpty = set.isEmpty();
  65. System.out.println("Set是否为空:" + isEmpty);
  66.  
  67. }
  68. }

运行结果:

[李四, 张三, 王五]
添加结果:false
[李四, 张三, 王五]
添加第一个null:true
[null, 李四, 张三, 王五]
添加第二个null:false
[null, 李四, 张三, 王五]
是否包含元素"张三":true
[null, 李四, 王五]
是否包含元素"张三":false
Set的大小:3
Set是否为空:false
[]
Set是否为空:true

注:TreeSet不能添加null元素,添加null时会抛出NullPointerException异常

  1. package collect;
  2.  
  3. import java.util.Set;
  4. import java.util.TreeSet;
  5.  
  6. /**
  7. * [简要描述]: Set
  8. * [详细描述]:
  9. *
  10. * @author Smalight Lv
  11. * @version 1.0, 2021/5/6 16:28
  12. * @since JDK 1.8
  13. */
  14. public class SetTest2 {
  15. public static void main(String[] args) {
  16. Set<String> set = new TreeSet<>();
  17.  
  18. //TreeSet不能加入null
  19. boolean rst = set.add(null);
  20. System.out.println("添加第一个null:" + rst);
  21. System.out.println(set);
  22.  
  23. }
  24. }

运行结果:

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)

  1. package collect;
  2.  
  3. import java.util.TreeSet;
  4.  
  5. /**
  6. * [简要描述]: Set
  7. * [详细描述]:
  8. *
  9. * @author Smalight Lv
  10. * @version 1.0, 2021/5/6 16:28
  11. * @since JDK 1.8
  12. */
  13. public class SetTest3 {
  14. public static void main(String[] args) {
  15. TreeSet<String> set = new TreeSet<>();
  16.  
  17. //添加元素到Set
  18. set.add("B");
  19. set.add("A");
  20. set.add("李四");
  21. set.add("王五");
  22. set.add("张三");
  23. set.add("a");
  24.  
  25.  
  26. //打印Set
  27. System.out.println(set);
  28.  
  29. //再加入一个王五,不能添加成功
  30. boolean rst = set.add("王五");
  31. System.out.println("添加结果:" + rst);
  32. System.out.println(set);
  33.  
  34. //获取Set中的第一个元素
  35. System.out.println(set.first());
  36. //获取Set中的最后一个元素
  37. System.out.println(set.last());
  38.  
  39. //判断Set中是否包含某个元素
  40. rst = set.contains("张三");
  41. System.out.println("是否包含元素\"张三\":" + rst);
  42.  
  43. //删除元素
  44. set.remove("张三");
  45. System.out.println(set);
  46.  
  47. //判断Set中是否包含某个元素
  48. rst = set.contains("张三");
  49. System.out.println("是否包含元素\"张三\":" + rst);
  50.  
  51. //Set的大小,即Set中元素的数量
  52. int size = set.size();
  53. System.out.println("Set的大小:" + size);
  54.  
  55. //判断Set是否为空
  56. boolean isEmpty = set.isEmpty();
  57. System.out.println("Set是否为空:" + isEmpty);
  58.  
  59. //清空Set
  60. set.clear();
  61. System.out.println(set);
  62.  
  63. //判断Set是否为空
  64. isEmpty = set.isEmpty();
  65. System.out.println("Set是否为空:" + isEmpty);
  66.  
  67.  
  68. }
  69. }

运行结果:

[A, B, a, 张三, 李四, 王五]
添加结果:false
[A, B, a, 张三, 李四, 王五]
A
王五
是否包含元素"张三":true
[A, B, a, 李四, 王五]
是否包含元素"张三":false
Set的大小:5
Set是否为空:false
[]
Set是否为空:true

三、Set的遍历

3.1增强for循环

  1. package collect;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. /**
  7. * [简要描述]:增强for循环遍历Set
  8. * [详细描述]:
  9. *
  10. * @author Smalight Lv
  11. * @version 1.0, 2021/5/6 17:01
  12. * @since JDK 1.8
  13. */
  14. public class SetTest4 {
  15. public static void main(String[] args) {
  16. Set<String> set = new HashSet<>();
  17.  
  18. set.add("唐僧");
  19. set.add("孙悟空");
  20. set.add("猪悟能");
  21. set.add("沙悟净");
  22. System.out.println(set);
  23.  
  24. for(String item:set){
  25. System.out.println(item);
  26. }
  27. }
  28. }

运行结果:

[猪悟能, 孙悟空, 沙悟净, 唐僧]
猪悟能
孙悟空
沙悟净
唐僧

3.2 迭代器遍历

  1. package collect;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Iterator;
  5. import java.util.Set;
  6.  
  7. /**
  8. * [简要描述]:增强for循环遍历Set
  9. * [详细描述]:
  10. *
  11. * @author Smalight Lv
  12. * @version 1.0, 2021/5/6 17:01
  13. * @since JDK 1.8
  14. */
  15. public class SetTest5 {
  16. public static void main(String[] args) {
  17. Set<String> set = new HashSet<>();
  18.  
  19. set.add("唐僧");
  20. set.add("孙悟空");
  21. set.add("猪悟能");
  22. set.add("沙悟净");
  23. System.out.println(set);
  24.  
  25. Iterator<String> iterator = set.iterator();
  26.  
  27. while(iterator.hasNext()){
  28. System.out.println(iterator.next());
  29. }
  30.  
  31. }
  32. }

运行结果:

[猪悟能, 孙悟空, 沙悟净, 唐僧]
猪悟能
孙悟空
沙悟净
唐僧

到此这篇关于Java基础之集合Set详解的文章就介绍到这了,更多相关Java集合Set内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号