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オーバーライドメソッドJavaのHashMapのキー混乱
@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);
}
IうちのHashMapからの要素、彼らは非常に奇妙なアウト。私は
> 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}
に してください増加が注文したのHashMapのキーを参照してくださいが、なぜ410アウト後の202
ことができますどのように、あなただけのSortedMapとHashMapの変更以下のprivate static final SortedMap<StringFirstFourSymbolsHashCode, Product> FIRST_FOUR_SYMBOLS_HASH_CODE_PRODUCT_HASH_MAP =
new SortedMap<StringFirstFourSymbolsHashCode, Product>()
を試すことが
'HashMap'は順序付けをまったく定義しません。エントリが挿入された順序で返される必要がある場合は、代わりに['LinkedHashMap'](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html)を使用してください。キー値順にエントリを返す必要がある場合は、[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
エントリがハッシュコードで注文されるのを待つかもしれませんが、これは起こりません:1)ハッシュテーブルが小さい場合、複数のハッシュコードのエントリを同じバケットに配置することができます。 2)エントリがハッシュテーブル内で占有すべき特定のセルを決定するために、ハッシュコードに関する追加の計算が実行される(例えば、テーブルサイズが8である場合、「セル=ハッシュ%8」) –