首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java8中迭代fastutil hashmap?

如何在Java8中迭代fastutil hashmap?
EN

Stack Overflow用户
提问于 2015-08-24 01:04:35
回答 4查看 2.2K关注 0票数 4

Java8中,我想比较Int2ObjectOpenHashMap (fastutil库)和我应用程序中的HashMap<Integer, MyObj>的时间性能和内存消耗。之前我迭代了java标准hashmap,如下所示:

代码语言:javascript
复制
HashMap<Integer, MyObj> myobjs = new HashMap<Integer, MyObj>();
// fill myobjs in
for (Map.Entry<Integer, MyObj> obj : myobjs.entrySet()) {
    ...
} 

如何(以最快的方式)迭代Int2ObjectOpenHashMap

EN

回答 4

Stack Overflow用户

发布于 2020-05-23 18:23:27

entry集合上有专门的fastForEach(),为了获得额外的性能,它重用了Int2ObjectMap.Entry<MyObj>类型的entry实例,而不是为每个循环周期重新创建一个entry实例

代码语言:javascript
复制
Int2ObjectOpenHashMap<MyObj> int2ObjHashMap = ...;
int2ObjHashMap.int2ObjectEntrySet().fastForEach((Int2ObjectMap.Entry<MyObj> entry) -> {
    int key = entry.getIntKey();
    MyObj value = entry.getValue();
    // ...
});

通过使用特定于int的方法int2ObjectEntrySet()getIntKey()而不是entrySet()getKey(),此代码还避免了与intInteger之间不必要的条目键的入箱和出箱操作。

票数 3
EN

Stack Overflow用户

发布于 2015-08-24 01:14:10

尝试:

代码语言:javascript
复制
Int2ObjectOpenHashMap<MyObj> myobjs = // ...
for(Int2ObjectMap.Entry<MyObj> entry : myobjs.int2ObjectEntrySet()) {
    int key = entry.getIntKey();
    MyObj obj = entry.getValue();
    // ...
}
票数 2
EN

Stack Overflow用户

发布于 2017-08-21 13:26:43

您可以使用streams和lambda表达式,

代码语言:javascript
复制
Int2ObjectOpenHashMap<Integer> myobjs = new Int2ObjectOpenHashMap<Integer>() ;
myobjs.forEach((key,value)->{
    int key1 =key;
    MyObj obj = value;
});
myobjs.entrySet().forEach(x->{
    int key = x.getKey();
    MyObj obj =x.getValue();
});
myobjs.entrySet().stream().forEach(x->{
    int key = x.getKey();
    MyObj obj = x.getValue();
});e
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32169192

复制
相关文章

相似问题

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