我想知道是否有更有效的方法来处理散列映射。
我有下面的Map (主),它由它的键和另一个Map作为值组成。
final Map<String,Map<Boolean,String>> primaryMap = new HashMap<>();
Map<Boolean,String> secondaryMap = new HashMap<>();对于我分配的每个键,我分配了2个secondaryMaps,并初始化了二级映射again.The序列,类似于下面显示的序列:
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<>();对内存有影响吗?
事先非常感谢,
猫
发布于 2018-05-29 11:45:01
在内部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;
}发布于 2018-05-29 11:43:22
不确定这是您的代码,还是仅仅是复制/粘贴问题,但看起来您在以下方面会更有效:
secondaryMap = new HashMap<>();
secondaryMap.put(true, "A");
secondaryMap.put(false, "B");
primaryMap.put("DOG", secondaryMap);secondaryMap.clear()在您的new之前也将清除您放置在主目录中的映射--它们是,相同的对象。
https://stackoverflow.com/questions/50583408
复制相似问题