2016-11-21 16 views
0

ChainHashMapsのArrayListをソートするのが難しいです。 ArrayListが保持する各HashMapには、StringとIntegerを含むエントリが1つしかありません。だから、これをソートするために、私はArrayList HashMapsのすべての値を取り、それらをソートする別のメソッドを作成しました。私が作成したこのメソッドは完全に動作します。私が問題を抱えている部分は、それをまとめて返し、ソートされたChainHashMaps(StringとIntegerを持つ)のArrayListを作成しています。ここで は、私がこれまで持っている方法です。ChainHashMapのArrayListをソートする

public static ArrayList<ChainHashMap<String, Integer>> sortWords(ArrayList<Integer> values, ArrayList<ChainHashMap<String, Integer>> a){ 
    ArrayList<ChainHashMap<String, Integer>> outcome = new ArrayList<ChainHashMap<String, Integer>>(); 
    for (int i = 0; i < values.size(); i++){ 
     for (int j = 0; j < a.size(); j++){ 
      for (Object k : a.get(j).keySet()){ 
       String word = (String) k; 
       if (values.get(i).equals(a.get(j).get(word))){ 
        ChainHashMap<String, Integer> oneEntry = new ChainHashMap<String, Integer>(); 
        oneEntry.put(word, a.get(j).get(word)); 
        outcome.add(oneEntry); 
       } 
      } 
     } 
    } 
    return outcome; 
} 

この方法は、(整数のArrayListを(これは私がChainHashMapsのちょうど整数値で別々にソートしているのArrayListである)とChainHashMapsのArrayListのを取りますStringとInteger。ソートする必要のある元のArrayListです)。ソートされたこれらのChainHashMapsのArrayListを返します。

これを実行すると、何とか終了してしまいます。これは宿題のためであり、私はそれを解決するために組み込みのJavaメソッドを使用したくありません。これに関する助けがあれば大いに感謝します。

+0

ChainHashMapで、どこで、私はそれを見つけることができますか? –

答えて

0

HashMapでテストすると、パフォーマンス上の問題や、私が手がかりがないという事実を除いて何が問題なのか分かりません。ChainHashMapです。

例。をソートする1​​,2,3,4-

入力と:[1, 2, 3, 4]

出力(正しい):[{first=1}, {second=2}, {third=3}, {fourth=4}]

パフォーマンス

[{first=1}, {fourth=4}, {third=3}, {second=2}]

入力は整数をソート

ソート方法は次のとおりです。スピードと可読性の面では最適化されていないため、必要な反復回数が増えます。いくつかの簡単な勝利は、以下のとおりです。

  • あなたは、内側のjループで結果を見つけた場合、break;
  • でそれから抜け出すあなたのマップは1つだけのエントリを持っているので、あなたがfor (Object k : a.get(j).keySet())
を必要としません。次のようにユニットテスト

のHashMapと(アサーション無し)テストとコードと

HashMapのコードが見える:

@Test 
public void testMap(){ 

    List<Map<String, Integer>> toBeSorted = Arrays.asList(new HashMap(){{ put("first", 1); }}, new HashMap(){{ put("fourth", 4); }}, new HashMap(){{ put("third", 3); }}, new HashMap(){{ put("second", 2); }}); 
    List<Integer> sortedList = Arrays.asList(1,2,3,4); 

    ArrayList<Map<String, Integer>> maps = sortWords(sortedList, toBeSorted); 

    System.out.print(maps); 
} 

public ArrayList<Map<String, Integer>> sortWords(List<Integer> values, List<Map<String, Integer>> a){ 
    ArrayList<Map<String, Integer>> outcome = new ArrayList<Map<String, Integer>>(); 
    for (int i = 0; i < values.size(); i++){ 
     for (int j = 0; j < a.size(); j++){ 
      for (Object k : a.get(j).keySet()){ 
       String word = (String) k; 
       if (values.get(i).equals(a.get(j).get(word))){ 
        Map<String, Integer> oneEntry = new HashMap<String, Integer>(); 
        oneEntry.put(word, a.get(j).get(word)); 
        outcome.add(oneEntry); 
       } 
      } 
     } 
    } 
    return outcome; 
} 

出力は正しいです:

[{first=1}, {second=2}, {third=3}, {fourth=4}] 
関連する問題