[英]How to iterate fastutil hashmap in Java8?
在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
?
條目集上有專門的fastForEach()
,為了獲得額外的性能,它不是為每個循環周期重新創建條目實例,而是重用Int2ObjectMap.Entry<MyObj>
類型的條目實例:
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
收件箱和發箱。
嘗試:
Int2ObjectOpenHashMap<MyObj> myobjs = // ...
for(Int2ObjectMap.Entry<MyObj> entry : myobjs.int2ObjectEntrySet()) {
int key = entry.getIntKey();
MyObj obj = entry.getValue();
// ...
}
您可以使用流和 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();
});e
Int2ObjectOpenHashMap
還實現了entrySet()
,因此您以相同的方式進行迭代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.