簡體   English   中英

Java - HashMap內存:優化

[英]Java - HashMap Memory : optimization

我想知道是否有更有效的方法來處理哈希映射。

我有以下Map(主要),它由其鍵和另一個Map組成。

   final Map<String,Map<Boolean,String>> primaryMap = new HashMap<>();
     Map<Boolean,String> secondaryMap = new HashMap<>();

對於每個鍵,我分配了2個secondaryMaps,然后我再次初始化輔助映射。序列類似於下面顯示的序列:

 secondaryMap = new HashMap<>();
       secondaryMap.put(true, "A");
       primaryMap.put("DOG", listedMap);

        secondaryMap.put(false, "B");
        primaryMap.put("DOG", listedMap);

 secondaryMap = new HashMap<>();

        secondaryMap.put(true, "C");
        primaryMap.put("CAT", listedMap);

        secondaryMap.put(false, "D");
        primaryMap.put("CAT", listedMap);

是否有更有效的方法來做到這一點? 在調用secondaryMap = new HashMap<>();之前, secondaryMap.clear()是否會對內存產生影響secondaryMap = new HashMap<>();

提前謝謝了,

只要內部Map只能有兩個鍵,您可以用自定義類替換它:

final Map<String,Map<Boolean,String>> primaryMap = new HashMap<>();

可能 :

final Map<String, Foo> map = new HashMap<>();

你可以填充它,如:

 map.put("DOG", new Foo("A", "B"));

Foo構造函數可以是:

public Foo(String valueForTrue, Sting valueForFalse){
   this.valueForTrue = valueForTrue;
   this.valueForFalse = valueForFalse;
}

它將節省一些內存(將需要更少的對象),但總體而言,它將使您的代碼更清晰。

當然,如果你可以添加String只為價值true的的false ,你可以贊成工廠超過公共構造情況Foo如:

private Foo(){
}

public static Foo ofTrue(String valueForTrue){
   Foo foo = new Foo();
   foo.valueForTrue = valueForTrue;
   return foo;
}

public static Foo ofFalse(String valueForFalse){
   Foo foo = new Foo();
   foo.valueForFalse = valueForFalse;
   return foo;
}

public static Foo of(String valueForTrue, Sting valueForFalse){
   Foo foo = new Foo();
   foo.valueForTrue = valueForTrue;
   foo.valueForFalse = valueForFalse;
   return foo;
}

不確定這是您的代碼還是只是復制/粘貼問題,但看起來您會更高效:

 secondaryMap = new HashMap<>();
 secondaryMap.put(true, "A");
 secondaryMap.put(false, "B");
 primaryMap.put("DOG", secondaryMap);

而在你的new之前的secondaryMap.clear()也將清除你放在主要的地圖 - 它們是同一個對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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