我想知道是否有一种更有效的方法来处理哈希映射。
我有以下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.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
中使用factory而不是public构造函数,例如: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;
}