[英]HashMap in Tree structure in Java
我正在尋找一個基本上可以像HashMap
一樣工作的容器,我可以在其中放置並獲取O(1)時間中的任何條目。 我還希望能夠進行迭代,但是我希望按值對順序進行排序。 所以TreeMap
和LinkedHashMap
都不適合我。 我發現以下示例:
SortedSet<Map.Entry<String, Double>> sortedSet = new TreeSet<Map.Entry<String, Double>>(
new Comparator<Map.Entry<String, Double>>() {
@Override
public int compare(Map.Entry<String, Double> e1,
Map.Entry<String, Double> e2) {
return e1.getValue().compareTo(e2.getValue());
}});
問題是SortedSet
沒有任何get方法來獲取條目。 我將在將要添加條目的地方使用此集合,但是如果已有條目,則將更新value(double),然后使用比較器(如上所述比較值)再次對其進行排序。 我可以用來滿足我的需求嗎?
Java類庫中沒有這樣的數據結構。
但是您可以創建一個作為私有HashMap和私有TreeMap的包裝的具有相同鍵/值對集合的包裝。
這給具有數據結構get
的復雜性O(1)
像一個普通HashMap
(但不put
它可在關鍵的順序重復或其他更新操作),以及一鍵設定和條目集...作為原請求這個問題的版本。
這是您的起點:
public class HybridMap<K,V> implements Map<K,V> {
private HashMap<K,V> hashmap = ...
private TreeMap<K,V> treemap = ...
@Override V get(K key) {
return hashmap.get(key);
}
@Override void (K key, V value) {
hashmap.put(key, value);
treemap.put(key, value);
}
// etcetera
}
顯然,我只實現了一些(簡單)方法。
如果您希望能夠按值順序(而不是鍵順序)對條目進行迭代,那么Java類庫中再也沒有這樣的數據結構。
在這種情況下,如果您需要生成的Map
完全符合API合同,則包裝HashMap
和TreeMap
將會非常復雜。
因此,我建議您只使用鍵/值對的HashMap和TreeSet ...並手動使它們保持同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.