问题是从HashMap.values()集合创建一个ArrayList需要多少成本?或者单独创建values集合?假设Map.size() > 100k。对象也可以一直保存在ArrayList (而不是HashMap)中,这会影响到其他部分(修改元素,很容易通过键)。ArrayList用于遍历每个第n个元素。(这就是为什么不能直接使用values集合的原因)。在迭代过程中不做任何修改。
发布于 2010-11-23 18:44:49
HashMap在内部将值存储在集合values中。看看AbstractMap的source code,它是HashMap的父类。
所以HashMap.values()直接返回一个Collection。没有进行任何计算或数据复制。它已经是最快的了。
只需获取值,然后执行for循环:
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
)发布于 2010-11-23 21:00:26
要详细说明@Bozho的解决方案,您可以这样做。
int count = 0;
for(Value value: map.values())
if(count++ % 5 == 0)
// do something.发布于 2010-11-23 18:32:44
您可以使用Iterator跳过元素-只需多次调用next()即可。
创建任何集合的列表具有线性复杂性。
https://stackoverflow.com/questions/4255075
复制相似问题