我想知道是否有一种更有效的方法来处理哈希映射。

我有以下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;
}

10-08 12:56