2017-05-18 1 views
1

マップにObjectListを挿入しました。12番目のインデックスの最初のレコードを挿入するハッシュマップ

最初の挿入は12番目のインデックスで行われています。

HashMapのデフォルトサイズは16であるため、最初のインデックスに4番目のレコードが挿入されています(インデックスが最後に到達したため16番目を意味します)。

私は間違った順序になっています。

でも、私はLinkedHashMapで試しました。同じ結果が来ている。

for (Type object: Objects) { 
     map.put(object.obj.getId() , object); 
    } 

は、この問題を解決するために私を助けてください:

そしてここでは私のコードです。

ありがとうございました。

+5

どのようなご注文を予定していますか? HashMapには順序はありませんか? LinkedHashMapは挿入命令を提供します。キーを並べ替えるには、TreeMapを使います。 – Eran

+0

@Eran 6つのレコードをマップに挿入しています。挿入は12番目のインデックスから開始されます。 (私はそれをデバッグすることによって見た。)しかし、私は最初からそれが欲しい。 –

+0

インデックスを制御することはありません(少なくとも直接はできません)。インデックスは 'hashCode'に基づいて決定されます。とにかくインデックスを気にするべきではありません。 – Eran

答えて

1

LinkedHashMapは、あなたが探しているものです。

HashMapとまったく同じですが、反復処理すると、挿入順に項目が表示されます。

1

マップはインデックスベースのアクセスを目的としたものではありません。 map.get(index)のようなものはありません。他の回答/コメントで説明したように反復しながら、可能なのは順序が保存されている:あなたは地図の内部の状態を気にはならない

for (Type object: Objects) { 
    map.put(object.obj.getId() , object); 
} 
for (Entry entry: map.entrySet()) { 
    // should be same order as inserted if LinkedHashMap is used 
} 

。そのすべてのカウントは、APIの記述された動作です。

+0

しかし、ここでは挿入自体に問題があります。最後のレコードが先頭に挿入されています。 –

+0

@SivaPasupathiいいえ、LinkedHashMapの内部データは、hastableのあるインデックスにそれを格納します。それがこのように動作することを意味するものではありません。ライブラリへのデバッグをやめ、APIドキュメントの読み込みを開始します。私の例を試してみると、記述どおりに動作します。 12番目のインデックスに格納されている要素は、最初に反復されます。 –

関連する問題