如何找出 TreeSet 包含具有隐式字段值的复杂对象

How to find out that a TreeSet contains a complex object with implicit field value

我有一个简单的class实习生:

public class Trainee {
private String firstName, lastName;
private int grade;

// constructors, getters-setters, etc.

而且我需要编写一个方法来寻找 TreeSet<Trainee> 中同名不同姓的实习生。我的第一次尝试只是用 for-each 迭代 TreeSet,然后简单的 if-construction,返回 true/false,但我的老师说检查 TreeSet 中的每个元素不是一个好主意。我真的不知道如何解决这个问题。嗯

public static boolean findWithAnotherLastName(TreeSet<Trainee> trs, Trainee someone) {
    Trainee lower = trs.lower(someone);
    Trainee higher = trs.higher(someone);
    if (lower != null && lower.getFirstName().equals(someone.getFirstName())) {
        return true;
    }
    return higher != null && higher.getFirstName().equals(someone.getFirstName());
}

我希望这是答案。

覆盖 Trainee class 中的 Object.equals() 方法。

public boolean equals (Object o)  
{
   return this.firstName.equals(((Trainee)o).getFirstName());  
}

并调用 set.contains(obj) 检查 Object 是否存在于 Set 中。