我有一个哈希映射,它使用线性探测来处理冲突。我想遍历它。从概念上讲,这很容易,然而,泛型的使用正在让我失望。
哈希映射的内部数组中的条目将其键值对作为泛型 - 就像这样
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 :(得分:0)
如果我理解你也许你可以创建LinkedHashMap(HashMap)(),你可以用它来横向进行。
答案 1 :(得分:0)
HashMap不按您期望的顺序存储条目。排序基于密钥的散列,并组织为链接列表数组。
如果您想要定义排序,则应使用TreeMap,它使用密钥的自然顺序。如果需要自定义排序,可以通过构造函数提供Comparator。然后只需迭代map.keySet。
但我认为你需要的东西(在中间某处开始迭代)不受支持。你开始在第一个节点进行迭代,在你到达你想要的密钥之前什么也不做,然后用剩下的条目完成你的工作,然后重新开始迭代,直到你再次到达你想要的密钥。