У меня есть класс в java, который содержит два целых числа и массив целых чисел в качестве членов, и я хочу сделать хэш-карту с указанным выше объектом в качестве ключа. Как мне переопределить оператор equals и hashCode() таким образом, чтобы объект, который имеет те же значения Integer, что и члены и те же записи в массиве, получает один и тот же код хэша? (Или это возможно даже так). Спасибо в Advance.Переопределение hashCode() в java для класса, содержащего массив
2
A
ответ
1
Для вычисления хэш-код для Int массива можно использовать java.util.Arrays.hashcode(int[])
.
Если вы посмотрите на его реализацию:
public static int hashCode(int a[]) {
if (a == null)
return 0;
int result = 1;
for (int element : a)
result = 31 * result + element;
return result;
}
вы можете получить представление о том, как вычислить хэш-код для класса, который должен быть на основе значений ваших двух целых чисел и целочисленного массива:
public class MyClass {
private int a, b;
private int[] array;
public int hashCode() {
return (31 * (31 * Arrays.hashCode(array) + a)) + b;
}
Для равна реализации может выглядеть следующим образом:
public int equals(Object o) {
if (o instanceof of MyClass) {
MyClass m = (MyClass)o;
return m.a == a && m.b == b && Arrays.equals(m.array, array);
}
else
return false;
}
4
Использование java.util.Arrays#equals(int[], int[])
и Arrays.hashCode(int[])
0
Вы можете проверить массив равенства, используя класс java.util.
Arrays
:
int[] array1 = { 1, 2, 3 };
int[] array2 = { 1, 2, 3 };
boolean equal = Arrays.equals(array1, array2) // --> true
Для вычисления хэш-кода массива, тот же класс может помочь вам, а также:
int hash = Arrays.hashCode(new int[] { 1, 2, 3 })
Обратите внимание, что класс имеет перегруженные методы для всех типов массивов, включая Object[]
.
Смежные вопросы
- 1. Java - переопределение hashCode и toString
- 2. Переопределение HashCode
- 3. Java hashCode для класса Point
- 4. Переопределение метода hashcode и equals в java?
- 5. Переопределение HashCode() в Java с двойными значениями
- 6. GetHashCode переопределение объекта, содержащего общий массив
- 7. Переопределение hashCode() - это достаточно хорошо?
- 8. Arduino инициация класса, содержащего массив класса
- 9. Scala: переопределение hashCode String для теста
- 10. Java - переопределение родительского класса
- 11. Переопределение hashcode с условием ИЛИ
- 12. Инициализация нового объекта класса, содержащего массив
- 13. Генерация hashCode() для пользовательского класса
- 14. Переопределение равно() и хэш-код() в Java
- 15. Переопределение HashCode, если это не проблема?
- 16. java hashcode и равно
- 17. Java - новый метод hashCode
- 18. Hashcode в Java
- 19. java hashcode return value
- 20. Hashcode для класса с 2-мя различными полями Java
- 21. Какова временная сложность метода hashCode Java для класса String?
- 22. Java: Можно ли реализовать hashCode и равно для стороннего класса?
- 23. Какова цель переопределения hashcode в java-объекте?
- 24. Переопределение метода анонимного класса в java
- 25. Java/Печать узла LinkedList, содержащего массив
- 26. Подписание Java-апплета, содержащего файлы свободного класса
- 27. реализация hashCode в java
- 28. Переопределение метода hashcode для класса со списком объектов в виде полей
- 29. Создание метода hashCode() - Java
- 30. Переопределение функции для экземпляра класса
Возможный дубликат [Переопределить равные] (http://stackoverflow.com/questions/8180430/how-to-override-equals-method-in-java) – sam
Я написал это некоторое время назад, как способ сделать то, что вы пытаетесь сделать это последовательно. Может быть полезно: http://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/util/PrimaryKey.java – ControlAltDel
@ sam2090 Я думаю, что этот вопрос требует, чтобы исправить использование 'equals' и' hashCode' на * массивы *, а не на целые числа. – Clashsoft