何を、あなたはドン作ります」それを頻繁に(例えばサイクルで)行う必要があります。
それ以外の場合は、カスタムコレクションを作成できます。あなたの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.
}
このように、あなたはがvalues()
から返さMultiset
をソートしています。しかし、それをリストにする必要がある場合(たとえば、配列のような配列get(index)
が必要な場合)、より複雑なものを作成する必要があります。
あなたは直接のSortedMapのいくつかの種類を使用してこの手順を避けたいと思うかもしれませんので、エントリが使用されているキーの自然順序になっています。 Java独自のTreeMapはSortedMapを実装します。 –
'TreeBidiMap'は' OrderedMap'です。順序はokです。質問に必要な並べ替えは、キーではなく値で行われます。 – Vlasec