2014-10-08 2 views
1

У меня есть следующая ситуация, и я прошу предложения сделать это «правильно» на Java.Какой класс сбора получить позицию в массиве?

У меня есть ArrayList, который содержит список объектов (назовем его объектом ),

каждый объект состоит из двух других объектов, давайте назовем их

  • объектом X
  • и объект Y

class A diagram

Сейчас в моем коде метод возвращает экземпляр объекта Y.

Теперь мне нужен индекс в ArrayList, где я нахожу тот же объект Y.

Пожалуйста, как мне делать это, не делая ужасных петель?

Что я могу использовать вместо ArrayList?

+0

Хью вы попробовали метод indexOf? Если эти объекты не имеют разных типов: http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#indexOf(java.lang.Object) – nbz

+1

цикл через ваш массив и do '(keyY.equals (array [index] .getY()) {return index;} ' –

+0

@nEm hi nEm, спасибо, исправьте меня, если я ошибаюсь, но это сработает, если бы у меня был экземпляр объекта A; объект Y вместо: - (( –

ответ

1

С помощью списка, находящего объект в списке с определенным значением, требуется только цикл, смотрящий на каждый объект, период.

Более естественным выбором для этой проблемы было бы поставить свои объекты в карту, с помощью Y в качестве ключа и объекта в качестве значения:

Map<Y, A> map = new HashMap<>(); 

void putA(A a) { 
    map.put(a.Y, a); 
} 

A getA(Y y) { 
    return map.get(y); 
} 

Обратите внимание, что карта хранит только один А, для каждое отдельное значение Y. Его не подходит для ассоциирования нескольких A с одним Y. Для этого вы использовали бы карту Set или что-то подобное.

1

Основной подход: цикл через массив и сделать

(keyY.equals(array[index].getY()){ return index;} 

более элегантным решением было бы создать структуру данных, как вы заполняете массив Map<Y, Integer>, который отображает экземпляры Y индексировать в массиве (или какое-то более значимого отображение основанный на реальном USECASE) и убедитесь, что вы реализуете надлежащего equals() и hashCode() в Y

0

вы определенно должны попробовать IndexOf ... это может или может не работать на некоторых объектах, но это зависит от данных членов.

+0

массив не имеет метода 'indexOf()', и если вы используете 'ArrayList', то' indexOf() 'использует' equals() 'внутренне, поэтому он будет работать, только если вы реализуете equals, чтобы просто сравнить' y', который isn «Хорошо, и он внутренне итерирует через массив –

Смежные вопросы