Что произойдет, если мы переопределим только hashCode () в классе и используем его в множестве?
Это может быть не сценарий реального мира, но просто интересно узнать, что происходит, ниже приведен код.
Я создаю набор объектов классаUsingSet
, Согласно концепции хеширования в Java, когда я впервые добавляю объект, который содержит «a», он создает корзину с хэш-кодом 97 и помещает объект в нее. Опять же, когда он встречает объект с «a», он вызывает переопределенный метод хеш-кода в классе UsingSet и получает хеш-код 97, что дальше?
Поскольку я не переопределил метод equals, реализация по умолчанию вернет false. Итак, где же будет храниться Объект со значением «а», в том же контейнере, где хранился предыдущий объект с хеш-кодом 97? или это создаст новое ведро? Кто-нибудь знает, как он будет храниться внутри?
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class UsingSet {
String value;
public UsingSet(String value){
this.value = value;
}
public String toString() {
return value;
}
public int hashCode() {
int hash = value.hashCode();
System.out.println("hashcode called" + hash);
return hash;
}
public static void main(String args[]) {
java.util.Set s = new java.util.HashSet();
s.add(new UsingSet("A"));
s.add(new UsingSet("b"));
s.add(new UsingSet("a"));
s.add(new UsingSet("b"));
s.add(new UsingSet("a"));
s.add(new Integer(1));
s.add(new Integer(1));
System.out.println("s = " + s);
}
}
вывод:
hashcode called65
hashcode called98
hashcode called97
hashcode called98
hashcode called97
s = [1, b, b, A, a, a]