beg*_*er_ 20 java collections performance arraylist hashmap
问题是从HashMap.values()集合创建ArrayList需要多少钱?或者单独创建值Collection?假设Map.size()> 100k.对象也可以一直保存在ArrayList(而不是HashMap)中,这对其他部分有影响(元素的修改,易于按键).ArrayList用于迭代每个第n个元素.(这就是为什么不能直接使用值集合的原因).在迭代期间不进行任何修改.
Buh*_*ndi 40
HashMap.values()不返回ArrayList值,而是返回ValuesCollection.
资源:
public Collection<V> values() {
Collection<V> vs = values;
return (vs != null ? vs : (values = new Values()));
}
Run Code Online (Sandbox Code Playgroud)
Values是一个AbstractCollection.值的原因只是引用HashMap的迭代器.
你的问题:
问题是从HashMap.values()集合创建ArrayList需要多少钱?
这是线性的复杂性(如Bozho所说)
ArrayList<V> valuesList = new ArrayList<V>(hashMap.values());
Run Code Online (Sandbox Code Playgroud)
ArrayList,valuesList调用collection hashMap toArray()方法,该方法基本上for从集合中的0..N(size)元素执行循环.
希望这可以帮助.
HashMap在内部存储集合中的值values.看看的源代码的AbstractMap,父HashMap.
So HashMap.values() directly returns a Collection. There is no computation or data copying done. It's as fast as it can be.
Just get the values and then do a for loop:
int n = 5; // every 5th element
Object[] values = hashMap.values().toArray();
int size = values.length;
for (int i = 0; i < size; i += n){
values[i];
// do something
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39691 次 |
| 最近记录: |