import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class PersonOverride {
    private String name;
    private int age;
    private boolean gender;

    public PersonOverride(String name, int age, boolean gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public PersonOverride() {
        this('default', 1, true);
    }

    @Override
    public String toString() {
        return name + '-' + age + '-' + gender;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }

        PersonOverride other = (PersonOverride) obj;

        return this.name.equals(other.name) && this.age == other.age && this.gender == other.gender;
    }

    public static void main(String[] args) {
        List<PersonOverride> persons1 = new ArrayList<>();

        int n1 = 3;
        for (int i = 0; i < n1; i++) {
            persons1.add(new PersonOverride());
        }

        List<PersonOverride> persons2 = new ArrayList<>();
        int n2 = 2;
        for (int i = 0; i < n2; i++) {
            String name = "default";
            int age = 1;
            boolean gender = true;

            // Input name, age, gender
            // ...

            PersonOverride person = new PersonOverride(name, age, gender);

            boolean exists = false;
            for (PersonOverride p : persons2) {
                if (p.equals(person)) {
                    exists = true;
                    break;
                }
            }

            if (!exists) {
                persons2.add(person);
            }
        }

        for (PersonOverride person : persons1) {
            System.out.println(person);
        }

        for (PersonOverride person : persons2) {
            System.out.println(person);
        }

        System.out.println("Number of objects in persons2: " + persons2.size());

        System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
    }
}

代码说明:

  1. 创建 PersonOverride 类

    • 定义私有属性 name, age, gender
    • 创建有参构造方法和无参构造方法,无参构造方法默认值使用 this(name, age, gender) 调用有参构造方法
    • 重写 toString() 方法,返回 name-age-gender 格式的字符串
    • 重写 equals() 方法,比较 name, age, gender 是否相等
  2. main 方法

    • 使用 ArrayList 创建两个列表 persons1persons2
    • 使用无参构造方法创建 n1 个对象并添加到 persons1 列表中
    • 循环 n2 次,输入 name, age, gender(示例中使用默认值)
    • 创建 PersonOverride 对象,并使用 equals() 方法判断对象是否已存在于 persons2 列表中
    • 如果对象不存在,则将其添加到 persons2 列表中
    • 输出 persons1persons2 列表中的所有对象
    • 输出 persons2 列表中实际包含的对象数量
    • 使用 Arrays.toString(PersonOverride.class.getConstructors()) 输出所有构造方法

代码重构建议:

  • 使用 ArrayList 代替数组,可以更方便地添加、删除和访问元素,避免数组大小固定的限制。
  • equals() 方法中,使用 instanceof 运算符判断类型,可以提高代码健壮性。
  • 可以使用 Objects.equals() 方法简化 equals() 方法的实现。
  • 可以使用 StringBuilderStringBuffer 类拼接字符串,提高效率。
Java 对象重写 equals 和 toString 方法:PersonOverride 类示例

原文地址: https://www.cveoy.top/t/topic/o8QZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录