Java在映射中交换两个键

Java在映射中交换两个键,java,map,key,Java,Map,Key,欢迎光临。 我有一个通用的void方法swap,它使用一个Map和两个键。该方法将交换与映射中的键关联的值。我已经检查过这两个键是否都包含在地图的其他地方,但是在这个方法中,我不能使用循环。 我的方法是: public static<K, W> swap(Map<K,V m, K key1, K key2>){ m.put(key2, m.put(?)) // I don't really understand what I would have to

欢迎光临。 我有一个通用的void方法swap,它使用一个Map和两个键。该方法将交换与映射中的键关联的值。我已经检查过这两个键是否都包含在地图的其他地方,但是在这个方法中,我不能使用循环。 我的方法是:

public static<K, W> swap(Map<K,V m, K key1, K key2>){
  m.put(key2, m.put(?)) // I don't really understand what I would have to
                        // put in this part, so how would i have to remember
                        // the 1st key, would I just set the value to
                        // a new initialized key?
}
公共静态交换(Map){
m、 put(键2,m.put(?)//我真的不明白我必须做什么
//把这部分放进去,我要怎么记住呢
//第一个键,我可以将值设置为
//新的初始化密钥?
}
此方法将交换两个键的值:

public void swap(Object key1, Object key2, Map map)
{
    Object temp = map.get(key1);
    map.put(key1, map.get(key2));
    map.put(key2, temp);
}
Map<K, V> aMap;

V temp = aMap.get(key1);
aMap.put(key1, aMap.put(key2, temp);

是的,您确实需要保存其中一个键的值,否则用键2替换键1的值时会丢失该值。

这将交换两个键的值:

public void swap(Object key1, Object key2, Map map)
{
    Object temp = map.get(key1);
    map.put(key1, map.get(key2));
    map.put(key2, temp);
}
Map<K, V> aMap;

V temp = aMap.get(key1);
aMap.put(key1, aMap.put(key2, temp);
Map-aMap;
V temp=aMap.get(键1);
aMap.put(键1,aMap.put(键2,温度);

使用临时持有人进行估价:

public static<K, V> swap(Map<K,V> m, K key1, K key2){
  V value = m.get(key1);
  m.put(key1, m.get(key2));
  m.put(key2, value);
}
公共静态交换(映射m、K键1、K键2){
V值=m.get(键1);
m、 put(键1,m.get(键2));
m、 put(键2,值);
}

…将起作用。put(..)返回映射中已存在的键的上一个值,然后该值将与键2关联。您可以不使用局部变量来执行此操作;但是此代码有点难以理解,变量可能会使代码的意图更清楚。

必须使用临时值保持器:

public static<K, V> swap(Map<K,V> m, K key1, K key2){
  V value = m.get(key1);
  m.put(key1, m.get(key2));
  m.put(key2, value);
}
公共静态交换(映射m,K key1,K key2){V值= m、 get(键1);m.put(键1, m、 get(key2);m.put(key2,value); }


解决此类问题的方法是简化它。忘记映射,如何交换两个变量?这样做。请注意方法参数中的语法错误。您有:map,但这应该是:map m,K key1,K key2您可以包括一个警告,说明这对多线程操作不安全。@Stephen-根据OP,他确保了这一点这两个键的值已经存在;因此上述代码不会在结构上修改映射,因此是安全的(如“不会破坏映射”)。当然,如果为相同的键(例如(k1,k2)和(k1,k3))调用,它可能会产生不可预测的结果,如果是这种情况,则应该同步。