学习java中的Maps接口,您可以在同一个键上引用不同的值吗?

学习java中的Maps接口,您可以在同一个键上引用不同的值吗?,java,collections,map,interface,Java,Collections,Map,Interface,我正在学习java中的Maps接口,您能在同一个键上引用不同的值吗?我的任务是建立一个字典程序,既能读入字典,又能读入一个新的文本文件。这本小说作为一个段落读入,然后解析成单独的单词/字符串,以便在字典中搜索拼写。我们的第一个任务是使用collections接口来完成这项工作,现在我必须使用映射并使用拼写错误的单词(键)引用段落(值)。如果我有一个拼写错误的单词,它只会被引用到一个段落,我不知道如何引用多个值 public void spellCheck() { long startTi

我正在学习java中的Maps接口,您能在同一个键上引用不同的值吗?我的任务是建立一个字典程序,既能读入字典,又能读入一个新的文本文件。这本小说作为一个段落读入,然后解析成单独的单词/字符串,以便在字典中搜索拼写。我们的第一个任务是使用collections接口来完成这项工作,现在我必须使用映射并使用拼写错误的单词(键)引用段落(值)。如果我有一个拼写错误的单词,它只会被引用到一个段落,我不知道如何引用多个值

public void spellCheck() {
    long startTime = System.currentTimeMillis();
    for (String singleParagraph : book.wordCollection) {
        String[] arrayWords = singleParagraph.split("[^a-zA-Z_0-9']+");
        for (String word : arrayWords) {
            if (useOptionalDict) {
                if ((dictionary.wordCollection.contains(word) != true)
                        && (word.isEmpty() != true)
                        && (optionalDictionary.wordCollection
                                .contains(word) != true)) {
                    misspelledWord.put(word, singleParagraph);
                }// end if
            }// end if
            else {
                if ((dictionary.wordCollection.contains(word) != true)
                        && (word.isEmpty() != true)) {
                    misspelledWord.put(word, singleParagraph);
                }// end if
            }// end else
        }// end enhanced for
    }// end enhanced for loop
    double elapseTime = (double) (System.currentTimeMillis() - startTime) / 1000.0;
    System.out
            .printf("\nTotal time to spell check %s: %f\nTotal mispelled words: %d\n",
                    book.getFileName(), elapseTime, misspelledWord.size());
}// end spellCheck()

在Java中,不可能将多个值映射到同一个键。但是,您可以创建自定义贴图来执行此操作

 Map<K, List<V>> map = new HashMap <K, ArrayList<V>>:
 where K => key type
 v => Value type
Map Map=newhashmap:
其中K=>键类型
v=>值类型
现在,您可以按如下方式编码:

插入:首先检查密钥是否存在于地图中。如果存在,则提取该键的对应列表,并将元素添加到列表中。或者,您需要初始化一个新的ArrayList,然后向其中添加值,然后将ArrayList插入到映射中


正如您所观察到的,这是大量的锅炉板代码,如果您在编码职业中再次需要这样的数据结构,这些代码将被重复。所以聪明的人有开发者库,你可以用它把多个值映射到一个键上。Multimap就是这样一种数据结构。您可以从Google Guava library查看MultiMap

是否可以使用值为
Set
对象的
Map
对象?将值作为所需类型的列表。在这种情况下,有一些有用的技巧,比如将集合存储为地图值,或者(我的偏好)使用Guava的
多地图
,但大部分问题都可以通过阅读来回答。如果你将
集合
作为值,这是可能的。@我非常感谢你提出这个问题……我完全错过了我该如何将引用的字符串添加到地图中的集合中呢?这件事令人沮丧。