2016-11-24 5 views
0

に新しいキーを追加します。オブジェクトを取得し、Stringを取得しようとします。このString/KeyがHashMapに存在する場合は値を更新し、そうでなければHashMapに新しいエントリを作成します。私はHashMapを持っていると私は、このHashMapを移入するリストを反復処理していたHashMapの最後のインデックスの代わりに、最初のインデックス

リストには6つのオブジェクトが含まれています。最初の3つはString/Key: "Health"を持ち、もう1つはString/Key: "Visa"を持っています。

最初の3つのオブジェクト(「健康」)を反復すると、HashMapは3つのオブジェクトを持つインデックス0(最初のキー)のキー「Heatlh」を持っていますが、別のキー"Visa")、この新しいKeyはインデックス0(最初のキー)に移動し、前のKeyはインデックス1(2番目のキー)に移動します。それは別の方法ではありませんか?

第2キー(「Visa」)は、最初のキーをインデックス0に置き換える代わりにインデックス1に移動する必要がありますか?私は繰り返し、HashMapを間違った方法で移入していますか、これがHashMapクラスの正しい方法ですか?

+0

「HashMap」はエントリの順序を保証しません。定義されたキー/エントリの順序が必要な場合は、代わりにTreeMapを使用する必要があります。 –

答えて

3

HashMapには発注がありません。挿入順序に従ってキーを並べ替えるには、LinkedHashMapを使用します。他の注文に従って注文する場合は、に適切なComparator<String>を付けて注文を定義します。

List<ParseObject> objects // this has already objects; 

final Map<String, ArrayList<ParseObject>> categoryTopics = new LinkedHashMap<>(); 
for (final ParseObject object : objects) { 

    final String category = object.getParseObject("helpCategory").fetchIfNeeded().getString("name"); 
    if (categoryTopics.containsKey(category)) { 
     final ArrayList<ParseObject> topics = categoryTopics.get(category); 
     topics.add(object); 
     categoryTopics.put(category, topics); 
    } else { 
     final ArrayList<ParseObject> topics = new ArrayList<>(); 
     topics.add(object); 
     categoryTopics.put(category, topics); 
    } 
} 
関連する問題