性能:从 HashMap.values() 创建一个 ArrayList [英] Performance: Creating an ArrayList from HashMap.values()
问题描述
问题是从 HashMap.values() 集合创建一个 ArrayList 需要多少成本?还是单独创建值集合?假设 Map.size() > 100k.对象也可以一直保存在 ArrayList(而不是 HashMap)中,这对其他部分(元素的修改,按键容易)有影响.ArrayList 用于迭代每个第 n 个元素.(这就是不能直接使用 values 集合的原因).迭代过程中不做任何修改.
Question is how much it costs to create an ArrayList from a HashMap.values() Collection? Or creating the values Collection alone? Assuming Map.size() > 100k. Objects could also be held in ArrayList (instead of HashMap) all the time which has implications in other parts (modifications of elements, easy by key). The ArrayList is used to iterate over every n-th element. (That's why the values collection can't be used directly). No modifications are done during the iteration.
推荐答案
HashMap.values()
返回的不是 ArrayList
的值,而是 Values
收藏.
HashMap.values()
doesn't return an ArrayList
of values but a Values
Collection.
来源:
public Collection<V> values() {
Collection<V> vs = values;
return (vs != null ? vs : (values = new Values()));
}
Values
是一个 AbstractCollection
.values的原因只是为了引用HashMap的迭代器.
Values
is an AbstractCollection
. The reason for values is just to reference HashMap's iterator.
您的问题:
问题是要花多少钱从一个 ArrayList 创建一个HashMap.values() 集合?
Question is how much it costs to create an ArrayList from a HashMap.values() Collection?
这是一个线性复杂度(如 Bozho 所说),因为
That's a linear complexity (as Bozho said) since
ArrayList<V> valuesList = new ArrayList<V>(hashMap.values());
ArrayList,valuesList
调用集合 hashMap
toArray()
方法,该方法基本上从集合中的 0..N(大小)个元素.
the ArrayList, valuesList
calls the collection hashMap
toArray()
method which essentially does a for
loop from 0..N (size) element in the collection.
希望这会有所帮助.
这篇关于性能:从 HashMap.values() 创建一个 ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!