集合——Set

逃离我推掉我的手 2023-01-21 05:30 243阅读 0赞

Set接口

1.set接口的主要实现类有HashSet和 TreeSet
2.HashSet是基于哈希表实现的,数据是无序的, HashSet元素可以是null,但只能有一个null
3.TreeSet是基于二又树实现的,可以实现数据的自动排序,确保集合元素处于排序状态,不允许放
4.HashSet的性能优于TreeSet,一般情况下建议使用 HashSet,如果需要使用排序功能建议使用TreeSet

代码实践:

对象类

  1. import java.util.Objects;
  2. //属性类
  3. public class Cat {
  4. private String name;
  5. private int month;//年龄
  6. private String specise;//品种
  7. //构造方法
  8. public Cat(String name, int month, String specise) {
  9. this.name = name;
  10. this.month = month;
  11. this.specise = specise;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getMonth() {
  20. return month;
  21. }
  22. public void setMonth(int month) {
  23. this.month = month;
  24. }
  25. public String getSpecise() {
  26. return specise;
  27. }
  28. public void setSpecise(String specise) {
  29. this.specise = specise;
  30. }
  31. @Override
  32. public String toString() {
  33. return "Cat{" +
  34. "名字='" + name + '\'' +
  35. ", 年龄=" + month +
  36. ", 品种='" + specise + '\'' +
  37. '}';
  38. }
  39. @Override
  40. public boolean equals(Object o) {
  41. if (this == o) return true;
  42. if (o == null || getClass() != o.getClass()) return false;
  43. Cat cat = (Cat) o;
  44. return month == cat.month && Objects.equals(name, cat.name) && Objects.equals(specise, cat.specise);
  45. }
  46. @Override
  47. public int hashCode() {
  48. return Objects.hash(name, month, specise);
  49. }
  50. }

实现类

  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4. public class CatText {
  5. public static void main(String[] args) {
  6. //定义宠物猫信息
  7. Cat hanghang = new Cat("黄黄",12,"英国短毛猫");
  8. Cat huahua = new Cat("花花",3,"白猫");
  9. //把宠物猫信息放入HashSet类里面
  10. //加入泛型就不用进行强制类型转换
  11. Set<Cat> set = new HashSet<Cat>();
  12. set.add(hanghang);
  13. set.add(huahua);
  14. //利用迭代器对集合进行遍历,输出猫的信息
  15. Iterator<Cat> it = set.iterator();
  16. while (it.hasNext()){
  17. System.out.println(it.next());
  18. }
  19. //添加一个属性相同的猫
  20. //无法添加
  21. System.out.println("************");
  22. System.out.println("添加一个属性相同的猫猫");
  23. Cat huahua01 = new Cat("huahua",3,"白猫");
  24. set.add(huahua);
  25. it = set.iterator();
  26. while (it.hasNext()){
  27. System.out.println(it.next());
  28. }
  29. //插入一个猫的信息
  30. System.out.println("**********");
  31. System.out.println("插入一个猫的信息");
  32. Cat huahua02 = new Cat("花花二代",2,"三花猫");
  33. set.add(huahua02);
  34. it=set.iterator();
  35. while (it.hasNext()){
  36. System.out.println(it.next());
  37. }
  38. //查询一个猫的信息,
  39. //第一种方法,利用对象名去查找
  40. System.out.println("************");
  41. System.out.println("利用对象查找一个猫的信息:");
  42. if(set.contains(huahua)){
  43. System.out.println("花花找到了");
  44. System.out.println(huahua);
  45. }else {
  46. System.out.println("没有找到花花这个猫");
  47. }
  48. //利用名字取查找信息
  49. //并输出这个猫的信息
  50. //利用迭代器进行遍历集合
  51. System.out.println("***********");
  52. System.out.println("利用猫名字去查找信息:");
  53. boolean flag = false;
  54. Cat c=null;
  55. it = set.iterator();
  56. while (it.hasNext()){
  57. //这里需要强制类型转换
  58. c = it.next();
  59. if(c.getName().equals("花花")){
  60. System.out.println("花花找到了");
  61. flag = true;
  62. break;
  63. }
  64. }
  65. //易错点
  66. //这里的输出语句要写在while外面,因为执行break后 就不会输出break后面的语句
  67. if(flag){
  68. System.out.println(c);
  69. }else {
  70. System.out.println("没有找到花花");
  71. }
  72. //删除花花二代 并输出信息
  73. //利用增强for循环
  74. //增强for循环的格式:
  75. //for(数据类型 变量名 :遍历的目标){ //数据类型 变量名:声明一个变量用来接收遍历目标遍历后的元素
  76. /*for(Cat cat:set){
  77. if(cat.getName().equals("花花")){
  78. //此操作只能删除最后一个元素,否者会进行报错,因为Set集合不允许一边遍历一边删除
  79. set.remove(cat);break;
  80. //需添加break结束循环
  81. }
  82. }*/
  83. //把年龄小于5的猫猫全部删除
  84. System.out.println("***************");
  85. System.out.println("删除年龄小于5的猫");
  86. Set set01 = new HashSet();
  87. for(Cat cat:set){
  88. if(cat.getMonth()<5){
  89. set01.add(cat);
  90. }
  91. }
  92. set.removeAll(set01);
  93. for(Cat cat:set){
  94. System.out.println(cat);
  95. }
  96. //删除所有猫的信息
  97. System.out.println("*************");
  98. boolean flag1 = set.removeAll(set);
  99. if(flag1){
  100. System.out.println("猫猫全部删除了");
  101. }else {
  102. System.out.println("猫还在");
  103. }
  104. }
  105. }

发表评论

表情:
评论列表 (有 0 条评论,243人围观)

还没有评论,来说两句吧...

相关阅读

    相关 集合set

    35个问题测试你对Python集合的认识 如何通过掌握集合的基本原理来压制算法问题 图片来自Pexels的Andrea Piacquadio 在我追求掌握面试算法的过程中,我

    相关 set集合

    目录 1,set集合的特点: 1.1,set集合添加的数据不可重复 1.2 hashset无序 Treeset有序 1.2.1set集合的遍历方法 1.2.2Tree

    相关 Set集合

    Scala `Set`是相同类型成对的不同元素的集合。换句话说,一个集合是不包含重复元素的集合。 集合有两种:不可变(`immutable`)和可变(`mutable`)。可变

    相关 Set集合

    简介 > 无序,不可重复的集合 HashSet ①、HashSet:不能保证元素的顺序;不可重复;不是线程安全的;集合元素可以为 NULL; ②、对于 Has

    相关 集合 set

    集合 set :去重复,做操作 .add 是增加一个整体,如add('op')是加'op'.update 是增加一个一个的字符是加 o和p in ,no

    相关 set集合

    概述 Set接口继承Collection Set接口常用实现类 1. HashSet 实现了 Set 接口 “它不保证 set 的迭代顺序;特别是它不保证

    相关 集合Set

    集合的一个关键的特点就是不能存放重复的元素,二分搜索树是一个非常好的实现集合的底层数据结构 1、二分搜索树实现集合: ![在这里插入图片描述][watermark_ty