2016-10-04 75 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上迭代。

但我认为你所需要的(在中间某处开始迭代)不受支持。你开始迭代第一个节点,直到达到你想要的密钥,然后用剩下的条目完成你的工作,然后重新开始迭代直到你再次到达你想要的密钥。