Java在Map中交换两个键

时间:2009-10-13 23:50:14

标签: java map key

欢迎。 我有一个通用的void方法交换,它接受一个Map和2个键。该方法将交换与Map中的键相关联的值。我已经检查过两个键都包含在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?
}

5 个答案:

答案 0 :(得分:9)

使用临时持有人获取价值:

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

答案 1 :(得分:3)

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

......会奏效。 put(..)返回已存在于映射中的该键的先前值,然后该值将与key2关联。你可以不使用局部变量来做到这一点;但是这段代码有点难以理解,变量可能会使代码的意图更加清晰。

答案 2 :(得分:2)

这将交换两个键的值:

Map<K, V> aMap;

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

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

是的,您需要保存其中一个键的值,否则在用key2替换key1的值时会丢失。

答案 4 :(得分:0)

您必须使用临时持有人获取价值:

  

公共静态交换(Map m,K   key1,K key2){V value =   m.get(KEY1); m.put(KEY1,   m.get(KEY2)); m.put(key2,value);   }