簡體   English   中英

HashMap Java的排序迭代

[英]Sorted Iteration of HashMap Java

我知道HashMap沒有排序,但是我可以創建任何迭代器來按鍵的排序順序返回值的迭代器。 我可以使用集合的排序版本,但是我正在尋找一種基於散列圖的方法。

任何此類迭代器都必須在內部對HashMap所有鍵進行排序,以便能夠按排序順序對其進行迭代。 使用已經排序的Map實現會更有效率。

您可以使用TreeMap,因為它是排序的地圖。

使用Java 8,這非常簡單:

import static java.util.Map.Entry.comparingByKey;

public <K extends Comparable<? super K>, V> Iterator<V> orderedIterator(final Map<K, V> map) {
    return map.entrySet().stream()
            .sorted(comparingByKey())
            .map(Map.Entry::getValue)
            .iterator();
}

注意,這很 ,因為需要每次對Stream進行排序-因此迭代變為O(n lg n)而不是O(n) 如果您需要大量執行此操作,則最好使用TreeMap插入為O(lg n) (而不是O(1) ),但迭代仍然為O(n)

我不確定這是完全可能的,至少從映射的角度來看,盡管我們可以創建一個特殊的哈希映射,但返回鍵是排序順序。

該映射可以擴展HashMap並具有一個包含排序順序的變量,然后具有一個按排序順序返回鍵和值的方法。

您可能有一個靜態實用程序方法,該方法采用HashMap並以排序順序返回Map.Entry的數組。

盡管上述方法可能有效,但TreeMap可能是可行的方法。 它是為該任務而設計的,由Josh Blotch編寫,因此它一定會很快地完成它的工作。 重新發明輪子總是需要更長的時間,而且效果也不佳。

注意:這取決於用例。 如果只需要使用排序的值一次,那么最好使用實用程序方法或自定義HashMap實現。 如果您打算經常使用Map ,請使用TreeMap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM