2017-02-22 24 views
1

У меня есть два массива объектов на Java, которые содержат некоторые поля, которые мне нужно сравнить, но мне нужно сравнить элемент за элементом, это означает, что я хочу, чтобы сравнить поле с первого объекта в моем первом массив с первым объектом в моем втором массиве, мой второй объект из первого массива с моим вторым объектом из второго массива и так далее. Это то, что я сделал до сих пор, но идея в том, что я не знаю, какой должен быть предел для моего второго массива. С моей точки зрения, второй массив должен начинаться с индекса первого массива, как это:Как сравнить два элемента массива по элементам в Java?

for(int i = 0; i < resultEntries.size(); i++) { 
    for(int j = i; j < resultColorEntries.size(); j++) { 
     if(resultEntries.get(i).getColor())... 
    }; 
} 

Другое решение или решение моей проблемы было бы только приветствовать. Заранее спасибо!

+0

Ваш второй цикл заставит второй массив пропустить все элементы в нем, откуда расположен первый индекс массива. При проверке индекса 0 на массиве 1 массив 2 будет проверяться от индекса 0 до N. При проверке индекса 1 на массиве 1 массив 2 будет проверяться от индекса 1 до N. – Sinstein

+0

Возможный дубликат [Как сравнить два объекта массивы в Java?] (http://stackoverflow.com/questions/6652085/how-to-compare-two-object-arrays-in-java) – Sinstein

+0

Также проверьте это: https://stackoverflow.com/questions/ 6652085/how-to-compare-two-object-arrays-in-java – Sinstein

ответ

0

Вы можете сохранить проверку индекса, что он меньше размера обоих массивов.

for(int i=0;i<resultEntries.size() && i<resultColorEntries.size();i++){ 
      if(resultEntries.get(i).getColor()) { 
      } 
    } 
0

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

Тогда вам не нужно писать вложенный цикл. Будут делать петли.

коды должны быть

for(int i=0;i<resultEntries.size();i++){ 

if(resultEntries.get(i).getColor().equals(resultColorEntries.get(i).getColor()))... 

Если у вас есть один и тот же размер списков.

1

Вы не должны сделать 2 петли, вы можете добиться этого только с одним:

for(int i = 0; i < resultEntries.size() && i < resultColorEntries.size(); i++) { 
    if(resultEntries.get(i).getColor().equals(resultColorEntries.get(i).getColor()) { 
     // Same! 
    } 
} 
0

Все это имеет смысл, только когда оба массива имеют одинаковые размеры; так что вы можете пойти:

Whatever a[] = ... 
Somthinelse b[] = ... 

check for equal length 

for (int i=0; i < a.length; i++) { 
    if (a[i].whatever.equals(b[i].whatever))... 

Точка: нет необходимости в двух петлях!

Но: нет nice способ обобщения, который (например: запись метода, который сравнивает эти массивы, но, например, в разных полях). Ну, вы могли бы использовать ссылки на метод, и с использованием ссылок метод, в конечном итоге с чем-то вроде

public void compareArraysOn(Whatever[] a, Other[] b, Function<T,U> extractorForA, ...) { 

, что можно было бы назвать как compareArraysOn(a, b, Whatever::getColor(), SomethinElse::getColor())

2

если вы хотите более эффективно сравнивать с O (N), вам нужно для реализации объекта hash() и добавления вашего элемента в hashset, например hasSetA для arrayA и hashsetB для вашего массива B, а затем сравнить эти два хэш-набора.