【问题标题】:Hashmaps having multiple keys with multiple values具有多个键和多个值的哈希图
【发布时间】:2013-06-12 06:30:30
【问题描述】:

我的 .ini 文件可以有多个键和多个值吗?如果有怎么办?

我知道我们可以使用列表或多重映射来拥有具有多个值的单个键,但我可以为多个键复制相同的概念吗 像这样-keys-a,b,c 值-(对于第 1 行)d、e、f 等等,对于多行 我真正想要的是我的ini文件

   key1||key2||key3
   value1||value2||value3
   value4||value5||value6

key1 映射到 value1 和 4 等等

所有这些都应该在一张地图中

【问题讨论】:

  • 所以你有一个映射,它的键是“a”,“b”,“c”,值是“d”,“e”,“f”.. 类似的东西?跨度>
  • 你能补充一些例子吗?
  • 值应该按照与键相同的顺序检索......就像 key1 检索 value1 和 value4......ke2 检索 value2 和 value5 等等

标签: java hashmap


【解决方案1】:

重新编辑,看起来您想通过任何键检索。所以你真正拥有的只是一张String : List 地图。

只需遍历该文件,在|| 上拆分每一行,然后将第一个条目添加到第一个键的列表中,将第二个条目添加到第二个键的列表中,等等。

非常粗略的类似 Java 的伪代码:

Map<String, List> map = HashMap<String, List>();
String line;
String[] entries;
int index;
String[] keys;

//...open file...

// First line is keys
line = source.readLine();
if (line == null) {
    // File is empty
}
else {
    // Add the keys
    keys = new String[entries.size()];
    index = 0;
    for (String key : entries) {
         keys[index++] = key;
         map.put(key, new LinkedList());
    }

    // Process entries
    while ((line = source.readLine()) != null) {
        entries = line.split("\\|\\|");
        index = 0;
        for (String entry : entries) {
            if (index >= keys.length) {
                break;
            }
            map.get(keys[index++]).add(entry);
        }
    }
}

...或类似的东西。


原始答案,仅供以后发现此问题并想另辟蹊径的人使用:

我可以通过两种方式阅读您的问题:

如果您的意思是要将List 存储在多个键下并使用其中任何一个来检索它,您可以这样做:

map.put(key1, list);
map.put(key2, list);
map.put(key3, list);

// ...later
list = map.get(key1); // or key2, or key3

如果您的意思是要使用 所有 键而不是单独的键来检索,那么从概念上讲,这只是一个键。您可以从任何MapList 类派生,根据您对“相同”键的定义添加您自己的equalsgetHashCode,然后使用它:

map.put(specialMultiKey, list);

// ...later
list = map.get(specialMultiKey);

【讨论】:

    【解决方案2】:

    您可以使用 Apache Common Collection 的 MultiKeyMap:http://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections/map/MultiKeyMap.html

    [编辑:如果您不想使用它,您可以通过扩展 Map 并提供类似于 MultiKeyMap 中给出的实现来编写自己的 MuliKeyMap 实现。]

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 2013-05-04
      • 2011-06-01
      • 2015-07-26
      • 1970-01-01
      • 2017-03-31
      • 2018-10-25
      • 1970-01-01
      相关资源
      最近更新 更多