有没有比保留相同功能的三个嵌套地图更好的解决方案?

use*_*882 2 java collections data-structures

情况就是这样

private Map<String, Map<String, Map<String, String>>> properties;
Run Code Online (Sandbox Code Playgroud)

我想要访问所有级别 - 获取Map<String, Map<String, String>>,Map<String, String>或者只是String从内部地图.

这可以用更好的方式来避免这种嵌套结构吗?创建一个隐藏实现并提供简单方法的包装器是显而易见的解决方案,但它只是隐藏了主要问题.

Mar*_*elo 6

我喜欢这种Key方法.

public class Key {

   private String keyA;
   private String keyB;
   private String keyC;

   public Key(String a, String b, String c) {
      keyA = "".equals(a) ? null : a;
      keyB = "".equals(b) ? null : b;
      keyC = "".equals(c) ? null : c;
   }

   public String getKey(){
      return keyA + keyB + keyC;
   }

   // equals() can be implemented using getKey()
}
Run Code Online (Sandbox Code Playgroud)

然后:

Map<Key, String> map = new HashMap<Key, String>();
map.put(new Key("a", "",""), "only one key");
map.put(new Key("a", "b", "c"), "all keys");
Run Code Online (Sandbox Code Playgroud)

请注意,您只需要一个地图,并且仍然可以获得一个对象,keyA因为它将具有不同的键值.

当然,如果你想存储具有相同索引的多个对象(或者恢复以相同的键开头的多个对象,就像在恢复中一样,Key("a", "a", "a")并且Key("a", "a", "b)在搜索Key("a", "a", "")时它将不起作用.但是,Map不管怎样,你不应该使用,并且应该得到一个合适的数据库.

  • 确保连续的密钥不能混合!在你的例子中,`Key("abc","","").getKey()`将与`key("a","b","c")相同.getKey()`这是有问题的. (2认同)