2

我正在尝试以某种<K, List<V>>格式创建字典。

private static Map<String, Collection<String>> dict = new HashMap<String, Collection<String>>();

使用new HashMap<>();new HashMap<String, ArrayList<String>>();抛出不兼容的数据类型错误

我需要一本类似于下面的字典。

a: apple, ajar, axe, azure
b: ball, bat, box
d: dam, door, dish, drown, deer, dare
u: urn, umbrella
y: yolk

为此,我写了下面的代码。put() 返回不兼容的参数编译错误。在这个例子中使用 put() 的正确方法是什么?

dict.put("a", "apple");
dict.put("a", "ajar");
.
.
.
dict.put("u", "umbrella");
dict.put("y", "yolk");
4

6 回答 6

7

您需要将 List 作为地图的值,例如:

List<String> listA = Arrays.asList("apple", "ajar", "axe", "azure");
dict.put("a", listA);

或者,您可以使用guava Multimap,它允许将多个值映射到给定键。

于 2013-07-24T14:28:25.603 回答
1

您的确切需求是apache-commons的MultiMap功能

MultiMap dict = new MultiHashMap();
dict.put("a", "apple");
dict.put("a", "ajar");
.
.
.
dict.put("u", "umbrella");
dict.put("y", "yolk");
于 2013-07-24T14:33:25.177 回答
1

这是因为您需要将 arrayList 放入值中,因为您的 Map 声明是这样的Map<String, Collection<String>>,因此它不能采用Map<String, String>.

 ArrayList<String> list = new ArrayList<String>();
 list.add("apple");
 dict.put("a",list );

根据 java 7,您可以使用菱形运算符来执行此操作,这样您就可以创建一个地图,

List<String, List<String>> = new ArrayList<>();
于 2013-07-24T14:30:11.130 回答
1

我首先将字典的类型更改为

private static Map<Character, ArrayList<String>> dict = new HashMap<>();

由于泛型不是协变的,因此可以更轻松地放置数组列表。

对于每个字母,创建:

ArrayList<String> myList=new ArrayList<>();

put()它一起听写

dict.put(myList);

然后你可以添加单词:

dict.get(letter).put(word);
于 2013-07-24T14:30:12.307 回答
1

你需要的是这个;

    List al = new ArrayList<String>();
    al.add("apple");
    al.add("ajar");

    HashMap<String, List<String>> hm = new HashMap<String, List<String>>();
    hm.put("a", al);

    System.out.println(hm.get("a"));

这是因为,当您使用时;

private static Map<String, Collection<String>>

需要一个像列表一样的集合。不要对象作为字符串插入

于 2013-07-24T14:31:14.410 回答
1

您只能遵循您所做的定义: Map<String, Collection<String>>意味着您将 dict.put(a,b) 与 a 为 String 和 ba 一起使用Collection

您正在尝试将 String 作为您的问题的值。你可能想做这样的事情:

Collection col = dict.get("a");
if (col == null) {
  col = new ArrayList();
}
col.add("apple");
dict.put("a",col);
于 2013-07-24T14:31:23.353 回答