簡體   English   中英

如何在 Java8 中迭代 fastutil hashmap?

[英]How to iterate fastutil hashmap in Java8?

Java8 ,想在我的應用程序中比較Int2ObjectOpenHashMapfastutil庫)和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() ,此代碼還避免了不必要的條目鍵進/出intInteger收件箱和發箱。

嘗試:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM