Java基础——Set集合去重复案例

案例:

创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合。
学生对象的成员变量值相同,我们就认为是同一个对象。

分析:

  1. 定义学生类,创建HashSet集合对象,创建学生对象。
  2. 把学生添加到集合。
  3. 在学生类中重写两个方法,hashCode()和equals()。
  4. 遍历集合。

代码如下:

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

/**
 * 目标:让Set集合把重复内容的对象去掉一个(去重复)
 */
public class SetDemo01 {
    public static void main(String[] args) {
        //Set集合去重复原因:先判断哈希值,再判断equals
        Set<Student> sets = new HashSet<>();

        Student s1 = new Student("大大",20,'男');
        Student s2 = new Student("大大",20,'男');
        Student s3 = new Student("小小",21,'男');
        //要实现去重复效果,就要重写equals和hashCode方法,不然s1与s2的哈希值不一样

        //因为s1,s2传入到重写hashCode方法里的参数一样,所以哈希值就一样
        System.out.println(s1.hashCode());//701913314
        System.out.println(s2.hashCode());//701913314
        System.out.println(s3.hashCode());//724792833

        //因为重写了hashCode方法,得到了对象s1,s2的哈希值一样,所以存进集合的值就实现了去重复
        sets.add(s1);
        sets.add(s2);
        sets.add(s3);

        //遍历集合
        for (Student set : sets) {
            System.out.println(set);
        }
//        Student{name='小小', age=21, sex=男}
//        Student{name='大大', age=20, sex=男}


    }
}

//1.创建一个学生类
class Student{
    private String name;
    private int age;
    private char sex;

    public Student() {
    }

    public Student(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    /**
     * 只要两个对象内容一样,结果一定是true
     * @param o
     * @return
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && sex == student.sex && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, sex);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_61275790/article/details/130031036
今日推荐