Сравните два массива по хеш-коду - PullRequest
0 голосов
/ 22 августа 2011

У меня есть два экземпляра одного и того же класса:

Object instance1;
Object instance2;

Я знаю, что у рассматриваемого класса есть поле массива.Мне нужно сравнить identityHashCode поля массива, и в некоторых случаях я ожидаю, что он будет одинаковым.

Дело в том, что они всегда разные.Я предполагаю, что этого следовало ожидать, так как в действительности это два разных экземпляра.

Есть ли способ сравнить два массива независимо от того, какие элементы они содержат?

Я использую отражение Java, чтобы получитьЗначение массивов.

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Есть ли способ сравнить два массива независимо от того, какие элементы они содержат?

Конечно, вы можете сравнить тип компонента и размер:

/**
 * Returns true iff two arrays of the same component type and
 * length are passed in.
 */
public static boolean pseudoArrayEquals(Object a, Object b){
    if(a==null||b==null||!a.getClass().isArray()||!b.getClass().isArray())
        throw new IllegalArgumentException("Expected two arrays");
    return a.getClass() == b.getClass()
           && Array.getLength(a) == Array.getLength(b);
}
0 голосов
/ 22 августа 2011

Вы можете перебирать массивы и вызывать метод hashCode() для объектов.Однако обратите внимание, что базовая реализация (в Object) возвращает разный хэш-код для каждого экземпляра.

Если вы хотите проверить, содержат ли оба массива одинаковые элементы, но, возможно, в другом порядке, вы должны создатьдва (хеш) набора (т.е. Set<Object>) и вызов containsAll(...) для наборов (возможно, взаимно, так как набор 1 может быть надмножеством набора 2).Если предположить, что неявный контракт equals() и hashCode() выполнен ("If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result."), это скажет вам, содержат ли оба массива одинаковые элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...