0
private static final HashMap<StringFirstFourSymbolsHashCode, Product> FIRST_FOUR_SYMBOLS_HASH_CODE_PRODUCT_HASH_MAP = new HashMap<StringFirstFourSymbolsHashCode, Product>() {{
put(new StringFirstFourSymbolsHashCode("121"), new Product("prod1", "100500"));
put(new StringFirstFourSymbolsHashCode("45631232"), new Product("prod2", "400500"));
put(new StringFirstFourSymbolsHashCode("6442112"), new Product("prod3", "20500"));
put(new StringFirstFourSymbolsHashCode("4562121"), new Product("prod4", "22500"));
put(new StringFirstFourSymbolsHashCode("4321"), new Product("prod5", "1020"));
}};
StringFirstFourSymbolHashCode overrided MethodenJava HashMap Key Verwirrende
@Override
public int hashCode() {
int hashCode = 0;
for(Character character : string.toCharArray()){
hashCode += character;
}
return hashCode;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof StringFirstFourSymbolsHashCode)) {
return false;
}
StringFirstFourSymbolsHashCode stringFirstFourSymbolsHashCode = (StringFirstFourSymbolsHashCode)obj;
return string.equals(stringFirstFourSymbolsHashCode.string);
}
Als ich Elemente aus HashMap sie outs sehr seltsam. Wie ich HashMap die Schlüssel bestellt durch Erhöhung sehen, aber warum nach 410 outs 202
> StringHashCodeLength HasMap Iterator
> StringFirstFourSymbolsHashCode{string='121,
> hashCode=148}=Product:name='prod1, cost='100500}
> StringFirstFourSymbolsHashCode{string='6442112,
> hashCode=356}=Product:name='prod3, cost='20500}
> StringFirstFourSymbolsHashCode{string='4562121,
> hashCode=357}=Product:name='prod4, cost='22500}
> StringFirstFourSymbolsHashCode{string='45631232,
> hashCode=410}=Product:name='prod2, cost='400500}
> StringFirstFourSymbolsHashCode{string='4321,
> hashCode=202}=Product:name='prod5, cost='1020}
bitte erklären, wie es
'HashMap' definiert überhaupt keine Sortierung. Wenn Sie Einträge in der Reihenfolge ihrer Eingabe benötigen, verwenden Sie stattdessen ['LinkedHashMap'] (https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html). Wenn Sie Einträge nach Schlüsselwert geordnet zurückgeben möchten, verwenden Sie eine der Implementierungen von "SortedMap" (https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html). –
http://stackoverflow.com/questions/30671239/why-are-elements-in-hashset-in-random-order – AdamSkywalker
Sie können warten, Einträge von Hash-Code bestellt werden, aber das passiert nicht: 1) wenn Hash-Tabelle klein ist, können Einträge von mehreren Hashcodes in demselben Bucket platziert werden; 2) um zu entscheiden, welche bestimmte Zelle ein Eintrag in der Hashtabelle belegen soll, wird eine zusätzliche Berechnung auf Hashcode durchgeführt (z. B. "Zelle = Hash% 8", wenn die Tabellengröße 8 ist) –