Java-HashMap内存:优化
我想知道是否有更有效的方法来处理哈希映射 我有下面的Map(primary),它由它的键和另一个Map作为值组成Java-HashMap内存:优化,java,memory,hashmap,Java,Memory,Hashmap,我想知道是否有更有效的方法来处理哈希映射 我有下面的Map(primary),它由它的键和另一个Map作为值组成 final Map<String,Map<Boolean,String>> primaryMap = new HashMap<>(); Map<Boolean,String> secondaryMap = new HashMap<>(); final Map primaryMap=new HashMap()
final Map<String,Map<Boolean,String>> primaryMap = new HashMap<>();
Map<Boolean,String> secondaryMap = new HashMap<>();
final Map primaryMap=new HashMap();
Map secondaryMap=新的HashMap();
对于每个键,我分配2个二次映射,并再次初始化二次映射。顺序与下面显示的顺序相似:
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=newhashmap();
第二个map.put(true,“A”);
primaryMap.put(“狗”,listedMap);
二次映射put(false,“B”);
primaryMap.put(“狗”,listedMap);
secondaryMap=newhashmap();
二次映射put(true,“C”);
primaryMap.put(“CAT”,listedMap);
二次映射put(false,“D”);
primaryMap.put(“CAT”,listedMap);
是否有一种更有效的方法可以做到这一点?
调用secondaryMap=newhashmap()之前,secondaryMap.clear()对内存有影响吗代码>
多谢各位
Kat不确定这是您的代码还是只是复制/粘贴问题,但看起来您可以更高效地使用:
secondaryMap = new HashMap<>();
secondaryMap.put(true, "A");
secondaryMap.put(false, "B");
primaryMap.put("DOG", secondaryMap);
secondaryMap=newhashmap();
第二个map.put(true,“A”);
二次映射put(false,“B”);
主要地图。放置(“狗”,次要地图);
和secondaryMap.clear()
在您的new
之前,也将清除您放置在主映射中的映射-它们是同一对象因为内部映射只能有两个键,您可以用自定义类替换它:
final Map<String,Map<Boolean,String>> primaryMap = new HashMap<>();
其中Foo
构造函数可以是:
final Map<String, Foo> map = new HashMap<>();
public Foo(String valueForTrue, Sting valueForFalse){
this.valueForTrue = valueForTrue;
this.valueForFalse = valueForFalse;
}
它将节省一些内存(因为需要的对象会少得多),但总体而言,它将使您的代码更加清晰。
当然,如果您可以仅为false
案例的true
添加String
值,那么您可以在Foo
中选择工厂而不是公共构造函数,例如:
map.put("DOG", new Foo("A", "B"));
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;
}
listedMap
和secondaryMap
应该是同一个东西吗?当然,您至少可以调用primaryMap.put(“DOG”,listedMap)一次(和“CAT”相同),每个内部映射最多可以有两个元素。你能简单地使用一对两个参考吗?如果要区分缺少的密钥和映射到null
Map secondaryMap=primaryMap.computeIfAbsent(“DOG”,k->new HashMap())的密钥,可以向节点添加一对布尔值
是在地图中使用地图的一种更好的方式——如果你想节省空间,你也可以使用字符串地图,例如,map.put(“DOG”,“AB”)
,然后.getOrDefault(“DOG”,“DOG”).charAt(布尔值?0:1)
谢谢,我想为了获得值,它的工作方式是相同的:例如,map.get(“CAT”).get(true)@凯瑟琳99不客气。可以,但也可以使用类似于map.get(“CAT”).getTrueValue()的内容跳过参数代码>非常感谢您的提示@davidxxx除非有证据证明这一点,否则我不认为简单地说它占用更少的空间实际上是准确的。这里可能是我,但我真的很喜欢地图
,同样,可能是我weird@Eugene这种方式没有贴图对象,也没有布尔值。您希望它如何像其他方式一样消耗那么多?“可能是我太怪异了”。如果您喜欢容易出错的代码,您可能并不奇怪,但很特别:)