HashMap
和LinkedHashMap
遍历values()
函数之间是否有性能差异?
我认为,LinkedHashMap
由于其高级nextEntry
实现,遍历必须更快Iterator
这就是为什么:
让我们逐步values
执行。
该HashMap
实施values
是这样的:
public Collection<V> values() {
Collection<V> vs = values;
return (vs != null ? vs : (values = new Values()));
}
在LinkedHashMap
从扩展HashMap
和继承相同的实现。
两者的Iterator
实现方式不同Values
。
因为HashMap
它从 java.util.HashMap.HashIterator
private final class ValueIterator extends HashIterator<V> {
public V next() {
return nextEntry().value;
}
}
但是LinkedHashMap
从java.util.LinkedHashMap.LinkedHashIterator
private class ValueIterator extends LinkedHashIterator<V> {
public V next() { return nextEntry().value; }
}
因此, 差异 本质上可以归结为nextEntry
实施。
因为LinkedHashMap
它只是调用e.after,其中e是Entry
,但是对于HashMap
遍历Entry[]
数组以查找下一个下一个要涉及一些工作。
UPDATE :用于nextEntry()
在HashMap
final Entry<K,V> nextEntry() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
Entry<K,V> e = next;
if (e == null)
throw new NoSuchElementException();
if ((next = e.next) == null) {
Entry[] t = table;
while (index < t.length && (next = t[index++]) == null)
;
}
current = e;
return e;
}
Entry []不是连续的存储。(之间可能有空值)。如果您看一下上面的代码,它的作用是指向current旁边,并通过迭代Entry []找到下一个next。
但是 我认为这种性能提升将以插入为代价。addEntry
在练习中检查这两个类中的方法。
问题内容: 我有两个哈希图 每个哈希图都有不同的键和值。我试图同时遍历两个哈希图,并乘以每个值 最简单快捷的方法是什么?我在两个哈希图中都有数千个值。 谢谢 问题答案: 您可能做错了… 首先,HashMap无法存储整数,它需要适当的对象-如整数-数组是一个对象,尽管它隐藏在某些语法糖的后面。 如果它们恰好具有相同的大小,这是循环遍历这两个地图的方法,我想这就是您的意思。 但是您可能应该回过头来重新
这是hashmap,当我尝试迭代它并打印值时,例如,我从随机位置获得值。为什么不显示0.92,0.91,0.90。。。 迭代后的结果: 0.5 0.32 0.68 0.18 0.82 0.49 0.51 0.31 0.69 0.48 0.52 0.08 0.92 0.17 0.83 0.47 0.3 0.7 0.53 0.16 0.84 0.46 0.54 0.29 0.71 0.45 0.55
我正在尝试迭代作为参数传递给jrxml的<code>HashMap</code>的值,在<code>HashMap</code>中,这些值作为<code>List</code>传递。 例 我如何在jasper report Jr XML中迭代这些< code>List?
有点初学者的问题但是... 我有一个从数据库返回的ResultSet对象-3列30行。 我检索以下数据集: null 我知道这应该不难,我只是在努力寻找迭代HashMaps的ArrayList的最佳方法
在javascript函数中尝试通过传递键迭代映射时,如下所示: 我得到的是空白值。但是当我硬编码key***user1***的值时,它就起作用了。 有人能帮我一下吗?
我想在HashMap中搜索重复项。目前这是我的HashMap: