1

HashMap>で値を変更する際に問題が発生しました。最初に私はこれを行います:

HashMap<String, ArrayList<Integer>> countries = new HashMap<>();
ArrayList<Integer> medals = new ArrayList<>();
medals.add(0); medals.add(0); medals.add(0);
for(int i = 0; i < COUNTRY.length; i++){
    countries.put(COUNTRY[i], medals);
}

HashMapに静的配列のキーを入力し、0、0、0で入力されたArrayListのデフォルト値を追加します。次にこれを行います。

Integer plus = new Integer(1);
for(int j = 0; j < athletes.size(); j++){
    if(j == 3)
        break;
    Athlete a = athletes.get(j);
    ArrayList<Integer> medals = countries.get(a.getCountry());
    Integer medal = medals.get(j) + plus;
    medals.set(j, medal);
    countries.put(a.getCountry(), medals);
}

アスリートの結果ですでにソートされているアスリートで満たされたArrayListがあります。私がやろうとしているのは、上位3位のアスリートを選び、HashMap値を更新して、ArrayListに、各国が獲得した金、銀、銅メダルの数を表す3つの数値が含まれるようにすることです。問題は、古い値を新しいArrayListに置き換えようとすると、HashMap内のすべての値が、一致するキーを持つ値だけでなく、新しいArrayListに置き換えられることです。

私は問題が何であるかわかりません、何か提案はありますか?

4

2 に答える 2

8

問題はこのコードにあります:

HashMap<String, ArrayList<Integer>> countries = new HashMap<>();
ArrayList<Integer> medals = new ArrayList<>();
medals.add(0); medals.add(0); medals.add(0);
for(int i = 0; i < COUNTRY.length; i++){
    countries.put(COUNTRY[i], medals);
}

リストのインスタンスを1つだけ作成し、それをすべての国に関連付けます。

考えられる修正は、ループの反復ごとに新しいリストを初期化することです。

HashMap<String, List<Integer>> countries = new HashMap<>();
for(int i = 0; i < COUNTRY.length; i++){
    List<Integer> medals = Arrays.asList(0, 0, 0);
    countries.put(COUNTRY[i], medals);
}

int[]リストのサイズが3に固定されている場合は、代わりにシンプルを使用してみませんか?

これは、コードが使用してどのように見えるかですint[]

Map<String, int[]> countries = new HashMap<>();
for(int i = 0; i < COUNTRY.length; i++){
    countries.put(COUNTRY[i], new int[3]);
}
//
for(int j = 0; j < athletes.size(); j++){
    if(j == 3)
        break;
    Athlete a = athletes.get(j);
    int[] medals = countries.get(a.getCountry());
    medals[j]++;
    // last to lines could even be
    // countries.get(a.getCountry())[j]++;
}
于 2012-11-28T08:36:07.707 に答える
0

google-guavaのMultiMapを使用する必要があります。Map<K,List<V>>これは、ある種の構造が必要なまさにこの状況のた​​めの設計です。つまり、同じキーに対して複数の値。

于 2012-11-28T08:38:01.503 に答える