首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >性能:从HashMap.values()创建ArrayList

性能:从HashMap.values()创建ArrayList
EN

Stack Overflow用户
提问于 2010-11-23 18:30:14
回答 4查看 42.5K关注 0票数 22

问题是从HashMap.values()集合创建一个ArrayList需要多少成本?或者单独创建values集合?假设Map.size() > 100k。对象也可以一直保存在ArrayList (而不是HashMap)中,这会影响到其他部分(修改元素,很容易通过键)。ArrayList用于遍历每个第n个元素。(这就是为什么不能直接使用values集合的原因)。在迭代过程中不做任何修改。

EN

回答 4

Stack Overflow用户

发布于 2010-11-23 18:44:49

HashMap在内部将值存储在集合values中。看看AbstractMapsource code,它是HashMap的父类。

所以HashMap.values()直接返回一个Collection。没有进行任何计算或数据复制。它已经是最快的了。

只需获取值,然后执行for循环:

代码语言:javascript
运行
复制
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
)
票数 9
EN

Stack Overflow用户

发布于 2010-11-23 21:00:26

要详细说明@Bozho的解决方案,您可以这样做。

代码语言:javascript
运行
复制
int count = 0;
for(Value value: map.values())
   if(count++ % 5 == 0)
     // do something.
票数 3
EN

Stack Overflow用户

发布于 2010-11-23 18:32:44

您可以使用Iterator跳过元素-只需多次调用next()即可。

创建任何集合的列表具有线性复杂性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4255075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档