具有多个值的多个键的哈希映射

时间:2013-06-12 06:30:31

标签: java hashmap

我的.ini文件可以有多个键和多个值吗?如果是这样的话?

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

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

key1映射到value1和4,依此类推

并且所有这些都应该在一个地图中

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

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