如何在HashMap中移动值

时间:2012-11-21 23:31:58

标签: java

我上课,让我们说曲棍球。曲棍球课程将设置曲棍球的得分,如下面的代码:

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);  
  }
}

曲棍球比赛只有两支球队和两支球队,是否可以交换分数? 例如,当我们插入到hashmap中时,它出现了键和值......

  

团队'a'= 23

     

团队'b'= 10

然后你交换hashmap中的值,它们看起来像......

  

团队'a'= 10

     

团队'b'= 23

对不起,伙计们,我想知道是否有类似的方法可以交换分数,而无需手动使用'a'和'b'参考。就像将任何键和值插入到散列映射中一样,此方法将交换值。

5 个答案:

答案 0 :(得分:6)

当然,传统上交换价值的方式是:

Integer tmp = map.get(a);
map.put(a, map.get(b));
map.put(b, tmp);

答案 1 :(得分:1)

你可以使用这个单行代码交换Map条目:

hockeyScore.put(a, hockeyScore.put(b, hockeyScore.get(a)));

答案 2 :(得分: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;
}

如果你更有野心,你可以迭代条目来获取密钥,而不是让它们可用。

答案 3 :(得分: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);
}

答案 4 :(得分:0)

非常感谢你的帮助!

我已经想通了交换hashmap中的值。首先,我收集了分数并将它们放入arraylist然后我将arraylist与hashmap进行比较,并根据arraylist重新设置哈希映射。

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());
            }
        }

    }

如果有更短的方法,请告诉我。

再次感谢大家!