2009-10-13 4 views
1

Добро пожаловать. У меня есть общий метод обмена пустотами, который берет карту и 2 ключа. Метод будет менять значения, связанные с ключами на карте. Я уже проверял, что оба ключа содержатся на карте где-то в другом месте, но в этом методе я не могу использовать цикл. Мой метод Ответ:Java обмен двумя ключами на карте

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? 
} 
+0

Способ решения такой проблемы заключается в ее упрощении. Забудьте о карте, как бы вы обменяли две переменные? Сделай это. –

+0

Обратите внимание на синтаксическую ошибку в параметрах вашего метода. У вас есть: карта , но это должно быть: Map m, K key1, K key2 – barrowc

ответ

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

Да, вам нужно сохранить значение 1 из ключей, в противном случае он будет теряется при замене значения key1 на key2.

+0

ok, поэтому K - это объекты? – 2009-10-13 23:56:00

2

Это будет поменять местами значения двух ключей:

Map<K, V> aMap; 

V temp = aMap.get(key1); 
aMap.put(key1, aMap.put(key2, temp); 
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); 
} 
+0

Вы можете включить предупреждение о том, что это не безопасно для многопоточной работы. –

+0

@ Stephen - согласно OP, он обеспечил, что значения для обоих ключей уже существуют; таким образом, вышеуказанный код не модифицирует карту структурно и, следовательно, безопасен (как в «не сломает карту»). Разумеется, это может привести к непредсказуемым результатам при вызове для тех же ключей (например, (k1, k2) и (k1, k3)), и их следует синхронизировать, если это так. – ChssPly76

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

... будет работать. put (..) возвращает предыдущее значение для этого ключа, который уже был на карте, который затем станет ассоциированным с key2. Вы можете сделать это, не используя локальную переменную; однако этот код немного трудно понять, переменная может сделать цель вашего кода более четкой.

0

Вы должны использовать временный держатель для значения:

общественности статической подкачки (карта M, K ключ1, К ключ2) {V значение = m.get (ключ1); m.put (key1, m.get (key2)); m.put (ключ2, значение); }

 Смежные вопросы

  • Нет связанных вопросов^_^