如何實現key, value有序的HashMap

2021-08-23 15:13:59 字數 1427 閱讀 3854

想要寫個key, value有序的hashmap,出現效能問題,大家幫忙給個主意吧。

[b]先說下我的設計思路:[/b]

linkedhashmap裡面有乙個模擬的「雙向迴圈鍊錶」,用來儲存entry的插入順序,我也可以採用這種方法來在插入的時候儲存key和value的有序。

這裡暫定名為orderedhashmap,主要**是從linkedhashmap抄過來的,它也維護著兩個模擬「雙向迴圈鍊錶」:keyheader和valueheader,保持key或value由小到大的順序。當有個元素put進來後,除把它存在雜湊桶中外,還要在keyheader按key的大小插入,也要在valueheader上按value的順序插入。

想要輸出的話,可以從這兩個「頭指標」向前或向後來迭代得到key或value有序的entry。

(可以實現key和value,正序逆序的輸出,只對數值型比較,如果不是數值型的話,如hashmap般正常處理)

下面是測試結果:

value逆序輸出

orderhashmapmap = new orderhashmap();

map.put(8, 1);

map.put(9, "value");

map.put(5, 6);

map.put("key", 9);

iterator> it = map.valuedescenditerator();

while (it.hasnext())

得到結果

key   9

5 6

8 1

key逆序輸出

orderhashmapmap = new orderhashmap();

map.put(8, 1);

map.put(9, "value");

map.put(5, 6);

map.put("key", 9);

iterator> it = map.keydescenditerator();

while (it.hasnext())

得到結果

9   value

8 1

5 6

[b]現在存在的問題:[/b]

1.hashmap的key, value都是object,而我現在只想比較數值型別的key或value的物件。對於所有數值型,怎麼做個通用的比較方法呢?(我先把它們轉成number類,再強制轉成double型別進行比較,總覺的這種方法很山寨)。

2.物件多的時候,插入很慢的。它要從煉表頭乙個接乙個的比較物件,速度奇慢無比,怎麼能優化下呢?(網上找「查詢有序鍊錶」時,都是那個key等於key或value,而我現在想要的不是「等於」而是「接近」,也就是如何生成乙個有序鍊錶)

取出Map中的key value

mapmap new hashmap map.put 1,第乙個value map.put 2,第二個value map.put 3,第三個value 1.通過keyset取出key與value,foreach迴圈 setkeys map.keyset 此行可省略,直接將map.keyset 寫在f...

為 Key Value 資料庫實現MVCC 事務

acid是軟體領域使用最廣泛的技術之一,它是關聯式資料庫的基石,是企業級中介軟體不可或缺的部分,但通常通過黑盒的方式提供。但是在許多情況下,這種古老的事務方式已經不能夠適應現代大規模系統和nosql資料庫的需要了,現代系統要求更高的效能要求,更大的資料量,更高的可用性。在這種情況下,傳統的事務模型被...

有序雙鏈表的實現

總時間限制 100000ms 記憶體限制 655360kb 描述定義有序的雙鏈錶類,鍊錶中儲存整型資料,建立帶頭結點的有序雙鏈表,要求包含以下成員函式 雙鏈表的建構函式 非空的鍊錶,輸入資料為0,表示輸入結束 插入操作 將乙個資料元素插入到有序的雙鏈表中,插入之後鍊錶仍然有序,輸入資料為0表示插入操...