2016-10-04 77 views
0

我有一個使用線性探測來處理碰撞的哈希映射。我想遍歷它。從概念上講,這很容易,但是,泛型的使用讓我興奮不已。遍歷使用泛型的哈希線性映射(Java)

散列映射的內部陣列中的條目具有其鍵 - 值對泛型 - 這樣

public entry(K key, V value) { 
     this.key = key; 
     this.value = value; 
    } 

這些條目存儲在一個條目陣列 - 這樣

private entry[] entries; 

我想從某個鍵開始遍歷哈希映射,我將到達內部數組的末尾,然後以循環方式返回到數組的開始位置,以便覆蓋整個數組。

public V traverse(K k) { 

    //look from current key 
    for(int i = (int)k; i < entries.length; i++){ 
     //visit node 
    } 
    //go back to start, and look up to key 
    for(int i = 0; i < (int)k; i++){ 
     //visit node 
    } 
} 

我已經意識到型鑄造鍵爲整數是有點兒傻,但我在努力尋找工作的方式真正做到這一點遍歷。

+0

那麼,你首先必須找到它...循環'條目',直到你找到一個'.key == k',然後使用你的代碼。 – Bakuriu

回答

0

如果我理解了你,也許你可以創建LinkedHashMap(HashMap)(),並且可以通過它來橫向執行。

0

HashMap不會按您期望的順序存儲條目。排序是基於密鑰的散列,並組織爲鏈表。

如果你想有一個定義的順序,你應該使用TreeMap,它使用鍵的自然順序。如果您需要自定義排序,則可以通過構造函數提供比較器。然後只需在map.keySet上迭代。

但我認爲你所需要的(在中間某處開始迭代)不受支持。你開始迭代第一個節點,直到達到你想要的密鑰,然後用剩下的條目完成你的工作,然後重新開始迭代直到你再次到達你想要的密鑰。