我上课,让我们说曲棍球。曲棍球课程将设置曲棍球的得分,如下面的代码:
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'参考。就像将任何键和值插入到散列映射中一样,此方法将交换值。
答案 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());
}
}
}
如果有更短的方法,请告诉我。
再次感谢大家!