在Java8中,我想比较Int2ObjectOpenHashMap (fastutil库)和我应用程序中的HashMap<Integer, MyObj>的时间性能和内存消耗。之前我迭代了java标准hashmap,如下所示:
HashMap<Integer, MyObj> myobjs = new HashMap<Integer, MyObj>();
// fill myobjs in
for (Map.Entry<Integer, MyObj> obj : myobjs.entrySet()) {
...
} 如何(以最快的方式)迭代Int2ObjectOpenHashMap
发布于 2020-05-23 18:23:27
entry集合上有专门的fastForEach(),为了获得额外的性能,它重用了Int2ObjectMap.Entry<MyObj>类型的entry实例,而不是为每个循环周期重新创建一个entry实例
Int2ObjectOpenHashMap<MyObj> int2ObjHashMap = ...;
int2ObjHashMap.int2ObjectEntrySet().fastForEach((Int2ObjectMap.Entry<MyObj> entry) -> {
int key = entry.getIntKey();
MyObj value = entry.getValue();
// ...
});通过使用特定于int的方法int2ObjectEntrySet()和getIntKey()而不是entrySet()和getKey(),此代码还避免了与int和Integer之间不必要的条目键的入箱和出箱操作。
发布于 2015-08-24 01:14:10
尝试:
Int2ObjectOpenHashMap<MyObj> myobjs = // ...
for(Int2ObjectMap.Entry<MyObj> entry : myobjs.int2ObjectEntrySet()) {
int key = entry.getIntKey();
MyObj obj = entry.getValue();
// ...
}发布于 2017-08-21 13:26:43
您可以使用streams和lambda表达式,
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();
});ehttps://stackoverflow.com/questions/32169192
复制相似问题