3 回答

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
Java API中沒有此類。您想要的Apache Commons類將成為BidiMap的實(shí)現(xiàn)之一。
作為數(shù)學(xué)家,我將這種結(jié)構(gòu)稱為雙射。

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是我用來完成此操作的簡(jiǎn)單類(我不想再有第三方依賴項(xiàng))。它沒有提供“地圖”中的所有可用功能,但是是一個(gè)好的開始。
public class BidirectionalMap<KeyType, ValueType>{
private Map<KeyType, ValueType> keyToValueMap = new ConcurrentHashMap<KeyType, ValueType>();
private Map<ValueType, KeyType> valueToKeyMap = new ConcurrentHashMap<ValueType, KeyType>();
synchronized public void put(KeyType key, ValueType value){
keyToValueMap.put(key, value);
valueToKeyMap.put(value, key);
}
synchronized public ValueType removeByKey(KeyType key){
ValueType removedValue = keyToValueMap.remove(key);
valueToKeyMap.remove(removedValue);
return removedValue;
}
synchronized public KeyType removeByValue(ValueType value){
KeyType removedKey = valueToKeyMap.remove(value);
keyToValueMap.remove(removedKey);
return removedKey;
}
public boolean containsKey(KeyType key){
return keyToValueMap.containsKey(key);
}
public boolean containsValue(ValueType value){
return keyToValueMap.containsValue(value);
}
public KeyType getKey(ValueType value){
return valueToKeyMap.get(value);
}
public ValueType get(KeyType key){
return keyToValueMap.get(key);
}
}

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
這是我的2美分。
或者,您可以對(duì)泛型使用簡(jiǎn)單的方法。小菜一碟。
public static <K,V> Map<V, K> invertMap(Map<K, V> toInvert) {
Map<V, K> result = new HashMap<V, K>();
for(K k: toInvert.keySet()){
result.put(toInvert.get(k), k);
}
return result;
}
當(dāng)然,您必須具有唯一值的映射。否則,將替換其中之一。
添加回答
舉報(bào)