MST

星途 面试题库

面试题:Java中Set如何基于自定义类实现去重

在Java中,如果有一个自定义类User,包含name和age属性。现在要将多个User对象放入Set集合中,并实现去重,即当两个User对象的name和age都相等时视为同一个对象。请描述实现步骤并给出关键代码示例。
50.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 实现步骤
    • 重写User类的equals方法,用于判断两个User对象的nameage是否相等。
    • 重写User类的hashCode方法,保证相等的User对象(根据equals方法判断)具有相同的哈希码。这是因为Set集合在判断元素是否重复时,先根据hashCode方法确定元素所在的桶,再通过equals方法进一步判断是否重复。
    • 创建User对象,并将其添加到Set集合中。
  2. 关键代码示例
import java.util.HashSet;
import java.util.Set;

class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 重写equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age && name.equals(user.name);
    }

    // 重写hashCode方法
    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + name.hashCode();
        result = 31 * result + age;
        return result;
    }
}

public class Main {
    public static void main(String[] args) {
        Set<User> userSet = new HashSet<>();
        User user1 = new User("Alice", 25);
        User user2 = new User("Bob", 30);
        User user3 = new User("Alice", 25);

        userSet.add(user1);
        userSet.add(user2);
        userSet.add(user3);

        System.out.println(userSet.size());// 输出2,因为user1和user3被视为同一个对象
    }
}