2016-04-13 7 views
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>() 

を試すことが

+5

'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)実装のいずれかを使用します。 –

+0

http://stackoverflow.com/questions/30671239/why-are-elements-in-hashset-in-random-order – AdamSkywalker

+0

エントリがハッシュコードで注文されるのを待つかもしれませんが、これは起こりません:1)ハッシュテーブルが小さい場合、複数のハッシュコードのエントリを同じバケットに配置することができます。 2)エントリがハッシュテーブル内で占有すべき特定のセルを決定するために、ハッシュコードに関する追加の計算が実行される(例えば、テーブルサイズが8である場合、「セル=ハッシュ%8」) –

答えて

0

をどのように動作するかを説明します。