Java 如何在HashMap中移动值
我有课,比如说曲棍球。曲棍球课将设置曲棍球得分,如下代码所示:Java 如何在HashMap中移动值,java,Java,我有课,比如说曲棍球。曲棍球课将设置曲棍球得分,如下代码所示: public class Hockey{ private HashMap<String, Integer> hockeyScore; public Hockey(){ hockeyScore = new HashMap<String, Integer>(); } public void setHockeyScore(String clubName, int score){
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曲棍球得分;
公共曲棍球{
hockeyScore=newhashmap();
}
public void setHockeyScore(字符串clubName,int score){
曲棍球得分。推杆(俱乐部名称,得分);
}
}
一场曲棍球比赛只有两个队和两个分数,可以交换分数吗?
例如,当我们插入hashmap时,它会显示键和值
a队=23
b队=10
然后交换hashmap中的值,如下所示
a队=10
b队=23
对不起,伙计们,我想知道是否有一种类似于交换分数的方法,而不用手动使用“a”和“b”引用。就像在hashmap中插入任何键和值一样,此方法将交换周围的值。当然,传统交换值的方式是:
Integer tmp = map.get(a);
map.put(a, map.get(b));
map.put(b, tmp);
您可以使用以下一行代码交换
Map
条目:
hockeyScore.put(a, hockeyScore.put(b, hockeyScore.get(a)));
我很难想象为什么要这样做,但这只在有两个条目的映射中才可能实现——否则,交换就没有意义了 我的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;
}
地图交换(字符串键1、字符串键2、地图m){
Map dummy=newhashmap();
虚拟放置(键2,m.get(键1));
虚拟放置(键1,m.get(键2));
返回假人;
}
如果您更雄心勃勃,您可以迭代条目以获取密钥,而不必让它们可用
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);
}
非常感谢你的帮助 我已经想出办法交换hashmap中的值。首先,我收集分数并将其放入arraylist,然后将arraylist与hashmap进行比较,并根据arraylist重新设置hashmap
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());
}
}
}
public void swapScores(){
对于(Map.Entry 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());
}
}
}
如果有较短的方法,请让我知道
再次感谢大家 使用
String[2]
和int[2]
并在数组中交换。仅对两个条目使用HashMap有点过火。您可以创建一个类,例如ScoreResult,保存名称和结果,或者在两个变量中创建两个实例,或者创建一个包含两个条目的此类数组。哦,是的,即使使用完整的concurrentMap
,也完全不可能实现原子化。仍然不是线程安全的。如果除了交换之外还有人在修改你的地图,锁将无法正确共享。然而,这是有点争议的,因为不清楚在threadsafety下应该首选的不变量是什么,但是是的,所有类型的离题,很可能OP现在没有这个问题。当然,你不会发布hockeyScore地图(如果你想要它threadsafe)!所有对地图的访问必须同步,每次读取,每次写入!