Set 集合 Hash集合存储学生对象并遍历

浏览 42 次     时间 2021-08-20 00:54:01     作者 有勇气的牛排    标签 Java

1 Hash集合存储学生对象并遍历

需求:创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合

要求:学生对象的成员变量值相同,我们救人为是同一个对象

思路

1、定义学生类

2、创建HshSet集合对象

3、创建学生对象

4、把学生添加到集合

5、遍历集合(增强for)

6、在学生类中重写两个方法

(1)hashCode() 和 equals()

(2)自动生成即可

2 实现

2.1 方案一

Student.java

package HashSetDemo;

public class Student {
    private String name;
    private int age;

    // 无参构造
    public Student() {
    }

    // 带参构造
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

HashSetDemo02.java

package HashSetDemo;

import java.util.HashSet;

public class HashSetDemo02 {
    public static void main(String[] args) {

        // 创建HashSet集合对象
        HashSet<Student> hs = new HashSet<>();

        // 创建学生对象
        Student s1 = new Student("灰太狼", 20);
        Student s2 = new Student("懒洋洋", 21);
        Student s3 = new Student("导演", 22);

        Student s4 = new Student("导演", 23);

        // 把学生添加到集合
        hs.add(s1);
        hs.add(s2);
        hs.add(s3);
        hs.add(s4);

        // 遍历集合(增强for)
        for (Student s : hs) {
            System.out.println(s.getName() + "," + s.getAge());
        }
    }
}

2.2 优化

Generate--> equals() and hashCode() 然后一直确定即可 Student.java

package HashSetDemo;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    // 无参构造
    public Student() {
    }

    // 带参构造
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

    @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 &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。