你要求什麼是一個相當costy時,要確保你不」 t需要經常做(例如在一個循環中)。
否則,您可以創建自定義集合。我想出了一個有你的TreeBidiMap
和TreeMultiset
在引擎蓋下。只實施你需要的並關心數據完整性。
class MyCustomCollection implements Map<K, V> {
TreeBidiMap<K, V> map;
TreeMultiset<V> multiset;
public V put(K key, V value) {
removeValue(map.put(key, value));
multiset.add(value);
}
public boolean remove(K key) {
removeValue(map.remove(key));
}
/** removes value that was removed/replaced in map */
private removeValue(V value) {
if (value != null) {
multiset.remove(value);
}
}
public Set keySet() {
return map.keySet();
}
public Multiset values() {
return multiset;
}
// many more methods to be implemented, e.g. count, isEmpty etc.
}
這樣,你有一個分類Multiset
從values()
返回。但是,如果你需要它是一個列表(例如,你需要類似於數組的get(index)
方法),你將不得不發明更復雜的東西。
你可能想避免這一步驟,直接利用某種SortedMap的,所以條目中所使用的密鑰的自然順序。 Java自己的TreeMap實現SortedMap。 – 2011-07-24 10:41:52
`TreeBidiMap`是一個`OrderedMap`,順序應該沒問題。問題中所需的排序依賴於值,而不是按鍵。 – Vlasec 2015-05-28 15:01:13