zoukankan      html  css  js  c++  java
  • Set容器--HashSet集合

    Set容器特点

    ①   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;

  • 相关阅读:
    基于Delphi的三层数据库系统的实现方法
    用数据表创建树_delphi教程
    多层数据库开发十三:剖析几个数据库应用程序
    多层数据库开发十二:使用数据控件
    多层数据库开发九:查询数据库
    第十一章 TClientDataSet
    用python做线性规划
    Python-sympy科学计算与数据处理(求极限及其它功能)
    Python-sympy科学计算与数据处理(方程,微分,微分方程,积分)
    Python-sympy科学计算与数据处理(数学表达式)
  • 原文地址:https://www.cnblogs.com/1315925303zxz/p/5403177.html
Copyright © 2011-2022 走看看