使用泛型遍历哈希映射线性(Java)

时间:2016-10-04 11:00:02

标签: java algorithm generics data-structures hash

我有一个哈希映射,它使用线性探测来处理冲突。我想遍历它。从概念上讲,这很容易,然而,泛型的使用正在让我失望。

哈希映射的内部数组中的条目将其键值对作为泛型 - 就像这样

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
    }
}

我已经意识到将键转换为整数的类型有点愚蠢,但我很难找到一种实际的方法来实现这种遍历。

2 个答案:

答案 0 :(得分:0)

如果我理解你也许你可以创建LinkedHashMap(HashMap)(),你可以用它来横向进行。

答案 1 :(得分:0)

HashMap不按您期望的顺序存储条目。排序基于密钥的散列,并组织为链接列表数组。

如果您想要定义排序,则应使用TreeMap,它使用密钥的自然顺序。如果需要自定义排序,可以通过构造函数提供Comparator。然后只需迭代map.keySet。

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