[英]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.