Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有比保留相同功能的三个嵌套贴图更好的解决方案?_Java_Data Structures_Collections - Fatal编程技术网

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

Java 有没有比保留相同功能的三个嵌套贴图更好的解决方案?,java,data-structures,collections,Java,Data Structures,Collections,情况是这样的 private Map<String, Map<String, Map<String, String>>> properties; 私有地图属性; 我希望能够访问所有级别-从内部映射中获取Map,Map,或者仅仅是String 可以用更好的方法避免这种嵌套结构吗?创建一个能够隐藏实现并提供简单方法的包装器是显而易见的解决方案,但它只是隐藏了主要问题。我喜欢键方法 public class Key { private String ke

情况是这样的

private Map<String, Map<String, Map<String, String>>> properties;
私有地图属性;
我希望能够访问所有级别-从内部映射中获取
Map
Map
,或者仅仅是
String


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

我喜欢
方法

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()
}
然后:

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");
Map Map=newhashmap();
map.put(新键(“a”、“a”、“仅一个键”);
地图放置(新键(“a”、“b”、“c”)、“所有键”);
请注意,您只需要一个贴图,并且仍然可以获得一个只有
keyA
的对象,因为它将具有不同的键值


当然,如果要存储具有相同索引的多个对象(或恢复以相同键开头的多个对象,如在搜索
键(“a”、“a”、“a”)时恢复
键(“a”、“a”)
键(“a”、“a”、“b”)
)这是行不通的。但是,无论如何,你不应该使用<代码> map <代码>,并且可能应该得到一个合适的数据库。

< p>你可以考虑查看一下谷歌Guavas集合类——也许你可以找到一个合适的实现,你可以使用“开箱即用”,而不是滚动自己的“

一个干净的解决方案”。(虽然最初比较麻烦)是将数据加载到内存中的
数据库中。然后,使用,您可以利用所有
OneToMany
关系,获取共享一个或多个键的对象集合。

您是指map.put(…),不是吗?请确保连续的键不能混合!在您的示例中,
Key(“abc”、“b”、“c”)。getKey()
将与
Key(“a”、“b”、“c”)相同。getKey()
这是有问题的。如果不在IDE上编写代码,就会发生这种情况(:好主意,但我认为它不适用于非字符串键arrg:corrected,if
new Key(“abc”),“,”,”;
将返回
abcnullnull
。perissf:OP从未要求非字符串解决方案(:你说的)创建一个能够隐藏实现并提供简单方法的包装器是显而易见的解决方案,但它只是隐藏了主要问题。”…这就是创建类的全部目的:隐藏一个特定的问题并公开简单的方法来处理它。我知道,但我正在寻找一个解决方案(在最好的情况下)不使用这些嵌套映射。可能是不同的数据结构或更好的方法