indexOf () с использованием ArrayList в java - PullRequest
0 голосов
/ 01 марта 2020

У меня есть класс A, который выглядит следующим образом:

A{
     String name;
     ArrayList<Bike> firstArray;
     ArrayList<Cycle> secondArray;
     // it's constructors and related methods are down lines.
 }

, и у меня есть два экземпляра с именами a_Obj и b_obj. Я сравниваю только переменную name внутри объекта a_Obj с b_Obj, используя indexOf.

Мой вопрос состоит в том, как вызвать indexOf в этом случае, иными словами, как сказать компилятору, что я просто хочу сравнить name двух объектов независимо от ArrayLists, объявленных внутри класса A.

Ответы [ 2 ]

1 голос
/ 01 марта 2020

вы можете переопределить equals () в вашем классе

0 голосов
/ 01 марта 2020

Ниже приведено, как indexOf был реализован по умолчанию:

public int indexOf(Object o) {
    ListIterator<E> it = listIterator();
    if (o==null) {
        while (it.hasNext())
            if (it.next()==null)
                return it.previousIndex();
    } else {
        while (it.hasNext())
            if (o.equals(it.next()))
                return it.previousIndex();
    }
    return -1;
}

Переопределив метод equals в A, чтобы рассмотреть только равенство name, вы можете сделать это бывает.

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    A other = (A) obj;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    return true;
}
...