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

时间:2019-03-15 17:27:23

标签: java collections treeset

我有一个简单的培训班:

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

// constructors, getters-setters, etc.

我需要编写一种方法来寻找TreeSet<Trainee>中具有相同名称和不同姓氏的受训者。我的第一次尝试是使用for-each迭代TreeSet,然后使用简单的if-construct进行迭代,返回true / false,但是我的老师说检查TreeSet中的每个元素不是一个好主意。我真的不知道该怎么解决。嗯。

2 个答案:

答案 0 :(得分:0)

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

我希望这是答案。

答案 1 :(得分:0)

在Trainee类中重写Object.equals()方法。

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

并调用set.contains(obj)来检查Set中是否存在对象。