如何将这些数据存储在Java中?

时间:2015-11-06 00:24:43

标签: java dictionary arraylist data-structures

我想要一本价值字典。键都是字符串。每个键对应于某种字符串列表。如何为每个键创建字符串列表并相应地更新?我会解释一下:

我有一个读取单词列表行的循环。然后将单词转换为字符串代码并在字典中设置为键。以下是字符串代码/字关系的示例。

123,[]

456,[狗]

328,[bug] ...

但是,我的程序会循环显示单词列表,并最终会遇到与“the”相同的单词,但也许是一个不同的单词,让我们说“cat”。所以我希望列表看起来像:

123,[,猫]

456,[狗] ...

我如何让它为每个可以在需要时随时添加的键创建一个arraylist?我的最终目标是能够打印出该列表中的单词列表以获取被调用的代码(.get())

5 个答案:

答案 0 :(得分:3)

您可以制作int i = this.chart1.Series[0].Points.AddXY(1, 1, 0); this.chart1.Series[0].Points[i].Color = Color.Transparent; 。在你的情况下 HashMap工作正常。

答案 1 :(得分:2)

就像已经说过的那样,MultiMap似乎就是你所需要的。 Guava已经提出过,这是一个不错的选择。您可以使用commons-collections的实施和实施。

来自commons-collections文档:

 MultiValuedMap<K, String> map = new MultiValuedHashMap<K, String>();
 map.put(key, "A");
 map.put(key, "B");
 map.put(key, "C");
 Collection<String> coll = map.get(key); // returns ["A", "B", "C"]

如果您不想使用外部库,则可以随时实现自己的MultiMap。使用HashMap<String,List<String>>存储您的值并使用您自己的put,get以及您认为合适的其他方法将其包装。

答案 2 :(得分:1)

听起来你想要来自the Guava libraryextension_dir = "C:\PHP\exe"; extension=php_bz2.dll; extension=php_curl.dll; extension=php_oci8.dll; extension=php_oci8_11g.dll;

您也可以使用Multimap的路线,但是您需要手动处理列表为空的情况(在这种情况下可能只是分配一个新列表)。

答案 3 :(得分:1)

您可以使用将每个id链接到字符串列表的HashMap:

Map<String, List<String>> dictionary = new HashMap<String,List<String>>();

现在让我们说你读了两个字符串:idword。要将它们添加到您的字典中,您可以先验证您的ID是否已被读取(使用containsKey()方法) - 在这种情况下,您只需将该字词附加到与该ID相对应的列表中 - 或者,如果这是不是这样,你用这个词创建一个新的列表:

//If the list already exists...
if(dictionary.containsKey(id)) {
    List<String> appended = dictionary.get(id);
    appended.add(word); //We add a new word to our current list
    dictionary.remove(id); //We update the map by first removing the old list
    dictionary.put(id, appended); //and then appending the new one
} else {
//Otherwise we create a new list for that id
    List<String> newList = new ArrayList<String>();
    newList.add(word);
    dictionary.put(id, newList); 
}

然后,只要您想检索某个ID的字符串列表,您就可以使用dictionary.get(id);

您可以在Java documentation

上找到有关HashMaps的更多信息

答案 4 :(得分:0)

我假设你不想在你的列表中重复,所以我使用了Set。

Map<String,Set<String>> mapToSet = new HashMap<>();
List<String []>keyvals = Arrays.asList(new String[][]{{"123","the"},{"123","cat"}});
for(String kv[] : keyvals) {
    Set<String> s = mapToSet.get(kv[0]);
    if(null == s) {
        s = new HashSet<String>();
    }
    s.add(kv[1]);
    mapToSet.put(kv[0], s);
}