3

私にはクラスがあります。ホッケーとしましょう。Hockey クラスは、以下のコードのようにホッケーのスコアを設定します。

public class Hockey{
  private HashMap<String, Integer> hockeyScore;

  public Hockey(){
    hockeyScore = new HashMap<String, Integer>();
  }

  public void setHockeyScore(String clubName, int score){
    hockeyScore.put(clubName, score);  
  }
}

ホッケーの試合には 2 つのチームと 2 つのスコアしかありませんが、スコアを交換することはできますか? たとえば、ハッシュマップに挿入すると、キーと値が出力されます...

チーム 'a' = 23

チーム「b」= 10

次に、次のようになるハッシュマップの値を交換します...

チーム「a」= 10

チーム「b」= 23

申し訳ありませんが、「a」と「b」の参照を手動で使用せずに、スコアを交換するような方法があるかどうか疑問に思っていました。キーと値をハッシュマップに挿入すると、このメソッドは値を交換します。

4

5 に答える 5

6

確かに、伝統的に値を交換する方法:

Integer tmp = map.get(a);
map.put(a, map.get(b));
map.put(b, tmp);
于 2012-11-21T23:33:47.587 に答える
1

Mapこのワンライナーを使用してエントリを交換できます。

hockeyScore.put(a, hockeyScore.put(b, hockeyScore.get(a)));
于 2012-11-21T23:37:09.340 に答える
0

ご助力ありがとうございます!

ハッシュマップの値を交換する方法を見つけました。最初にスコアを収集して配列リストに入れ、次に配列リストをハッシュマップと比較し、配列リストに従ってハッシュマップを再設定しました。

public void swapScores(){ 
        for(Map.Entry<Team, Integer> getScores: winningTeam.entrySet()){
            if(scores.get(0).equals(getScores.getValue())){
                getScores.setValue(scores.get(1));
                System.out.println(getScores.getKey().getTeamName()+":"+getScores.getValue());
            }else if(scores.get(1).equals(getScores.getValue())){
                getScores.setValue(scores.get(0));
                System.out.println(getScores.getKey().getTeamName()+":"+getScores.getValue());
            }
        }

    }

これを行うためのより短い方法があれば、私に知らせてください。

改めまして、皆様ありがとうございました!

于 2012-11-22T01:28:18.743 に答える
0

なぜこれをしたいのか想像がつきませんが、これは 2 つのエントリを持つマップの場合にのみ可能です。そうでない場合、スワップは意味がありません。

私の Java は少し錆びているので、構文をチェックするためだけに Eclipse を引き出すつもりはありませんが、これと非常によく似たものがあなたのために仕事をするはずです:

Map<string, int> swapped(string key1, string key2, Map<string, int> m) {
    Map dummy = new HashMap<string, int>();

    dummy.put(key2, m.get(key1));
    dummy.put(key1, m.get(key2));

    return dummy;
}

より野心的な場合は、キーを使用可能にするのではなく、エントリを反復してキーを取得できます。

于 2012-11-21T23:38:24.500 に答える
0
Integer aScore = hockeyScore.get("a");
hockeyScore.put("a", map.get("b"));
hockeyScore.put("b", aScore);

およびスレッドセーフバリアント

synchronized (hockeyScore) {
   Integer aScore = hockeyScore.get("a");
   hockeyScore.put("a", map.get("b"));
   hockeyScore.put("b", aScore);
}
于 2012-11-21T23:46:36.043 に答える