1. 程式人生 > >如何實現HashMap順序儲存:可以參考LinkedHashMap的底層實現

如何實現HashMap順序儲存:可以參考LinkedHashMap的底層實現

方法一: 維護一張表,儲存資料插入的順序,可以使用vector。但是如果刪除資料呢,首先得在vector裡面找到那個資料,再刪除,而刪除又要移動大量資料。效能效率很低。
使用list,移動問題可以解決,但是查詢資料的O(n)時間消耗,如果刪除m次,那查詢資料的效能就是0(n*m),那總體效能也是 O(n2)。效能還是沒法接受。

方法二:
可以在hashmap裡面維護插入順序的id, 在value建一個欄位儲存id值,再維護一張表vector,並且id對應vector裡面的值。
插入的時候,id+=1, hashmap.insert,vector.push_back.
刪除的時候,先hashmap.find(key), 得到value, 並從value中得到id,  通過id把對應vector值置為無效。
更新:刪除+插入。
維護工作OK了,輸出的時候直接輸出vector裡面的值就可以了, 無效的就continue。
演算法複雜度為O(n)

方法三:
Java裡面有個容器LinkedHashMap, 它能實現按照插入的順序輸出結果。
它的原理也是維護一張表,但它是連結串列,並且hashmap中維護指向連結串列的指標,這樣可以快速定位連結串列中的元素進行刪除。
它的時間複雜度也是O(n), 空間上要比上面少些