重写equals和hashCode方法,先比较年龄age(升序),年龄相同时再比较英文姓名name(升序),最后答应输出,用java写
时间: 2024-03-10 08:46:30 浏览: 67
要重写equals和hashCode方法,需要在类中重写这两个方法。以下是一个示例代码,其中假设有一个名为Person的类,其中包含age和name属性。
```
import java.util.Objects;
public class Person {
private int age;
private String name;
// 构造函数等其他成员变量和方法省略
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(age, name);
}
// 比较年龄升序,年龄相同时比较英文姓名升序
public int compareTo(Person otherPerson) {
int result = Integer.compare(this.age, otherPerson.age);
if (result == 0) {
result = this.name.compareTo(otherPerson.name);
}
return result;
}
// toString方法
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
```
在equals方法中,我们比较了两个Person对象的age和name属性是否相等。在hashCode方法中,我们使用了Objects类的hash方法来生成hashCode。对于比较年龄和英文姓名,我们在类中添加了一个compareTo方法,其中比较了两个Person对象的age和name属性,如果当前对象的age小于otherPerson对象的age,则返回-1,如果当前对象的age大于otherPerson对象的age,则返回1,如果当前对象的age等于otherPerson对象的age,则比较name属性。最后,我们在类中添加了toString方法,用于将Person对象转换为字符串输出。
示例代码中,可以通过以下方式将Person对象按照年龄升序,年龄相同时按照英文姓名升序排列:
```
List<Person> personList = new ArrayList<>();
personList.add(new Person(25, "Tom"));
personList.add(new Person(18, "Bob"));
personList.add(new Person(18, "Adam"));
Collections.sort(personList);
System.out.println(personList);
```
输出:
```
[Person{age=18, name='Adam'}, Person{age=18, name='Bob'}, Person{age=25, name='Tom'}]
```
阅读全文