• Set容器--HashSet集合


    ①   Set容器是一个不包含重复元素的Collection,并且最多包含一个null元素,它和List容器相反,Set容器不能保证其元素的顺序;

    ②   最常用的两个Set接口的实现类是HashSet和TreeSet;

    复制代码
    复制代码
    1         HashSet<String> data=new HashSet<String>();
    2         data.add("张三");
    3         data.add("李四");
    4         data.add("jay");
    5         data.add("jack");
    6         data.add("jay");
    7         System.out.println(data);
    复制代码
    复制代码

    输出结果:

    [张三,李四,jay,jack]

    此处第二个jay没有存入;

    可以将其打印出来System.out.println(data.add("jay"));,结果显示第一个为true,第二个为false

    编写一个Student类:

    复制代码
    复制代码
     1 class Student{
     2     private String name;
     3     private int age;
     4     public Student(String name, int age) {
     5         super();
     6         this.name = name;
     7         this.age = age;
     8     }
     9     public String getName() {
    10         return name;
    11     }
    12     public void setName(String name) {
    13         this.name = name;
    14     }
    15     public int getAge() {
    16         return age;
    17     }
    18     public void setAge(int age) {
    19         this.age = age;
    20     }
    21 }
    复制代码
    复制代码

    主方法中添加及输出

    复制代码
    1         HashSet<Student> stuSet=new HashSet<Student>();
    2         System.out.println(stuSet.add(new Student("张三",20)));
    3         System.out.println(stuSet.add(new Student("李四",30)));
    4         System.out.println(stuSet.add(new Student("张三",20)));
    5         System.out.println(stuSet.size());
    6     
    复制代码

    输出结果:

    true

    true

    true

    3

    由此可见:new Student("张三",20)两次都创建了,若想字相同时只创建一次则需重构hashCode和equals方法

    如下:

    复制代码
    复制代码
     1     @Override
     2     public int hashCode() {
     3         final int prime = 31;
     4         int result = 1;
     5         result = prime * result + age;
     6         result = prime * result + ((name == null) ? 0 : name.hashCode());
     7         return result;
     8     }
     9     @Override
    10     public boolean equals(Object obj) {
    11         if (this == obj)
    12             return true;
    13         if (obj == null)
    14             return false;
    15         if (getClass() != obj.getClass())
    16             return false;
    17         Student other = (Student) obj;
    18         if (age != other.age)
    19             return false;
    20         if (name == null) {
    21             if (other.name != null)
    22                 return false;
    23         } else if (!name.equals(other.name))
    24             return false;
    25         return true;
    26     }
    复制代码
    复制代码

    再次执行,输出结果:

    true

    true

    false

    2

    总结:HashSet的内部操作的底层数据是HashMap,只是我们操作的是HashMap的key;

  • 相关阅读:
    使用SQLite做本地数据缓存的思考
    毕业后第一次跳槽面试的点滴记录
    Nancy基于JwtBearer认证的使用与实现
    谈谈Nancy中让人又爱又恨的Diagnostics【上篇】
    CentOS 7.x 防火墙开放端口相关用法记录
    浅析如何在Nancy中使用Swagger生成API文档
    浅析如何在Nancy中生成API文档
    初探CSRF在ASP.NET Core中的处理方式
    微信小程序支付简单小结与梳理
    浅析Content Negotation在Nancy的实现和使用
  • 原文地址:https://www.cnblogs.com/wangchaoyuana/p/7545191.html
Copyright © 2020-2023  润新知