我正在尝试以<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");
答案 0 :(得分:7)
您需要将List作为值放置到地图中,例如:
List<String> listA = Arrays.asList("apple", "ajar", "axe", "azure");
dict.put("a", listA);
或者,您可以使用guava Multimap,它允许将多个值映射到给定键。
答案 1 :(得分: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<>();
答案 2 :(得分:1)
我首先要将字典的类型更改为
private static Map<Character, ArrayList<String>> dict = new HashMap<>();
它允许更容易放置数组列表,因为泛型不是协变的。
对于每个字母,请创建:
ArrayList<String> myList=new ArrayList<>();
和put()
用
dict.put(myList);
然后你可以添加单词:
dict.get(letter).put(word);
答案 3 :(得分: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>>
你需要像列表一样的集合。 DoNOT 将对象作为字符串
插入答案 4 :(得分:1)
您只能遵循您所做的定义:
Map<String, Collection<String>>
表示您使用dict.put(a,b),其中a为String,b为Collection
。
您正在尝试将String作为您的问题的值。 你可能想做类似的事情:
Collection col = dict.get("a");
if (col == null) {
col = new ArrayList();
}
col.add("apple");
dict.put("a",col);
答案 5 :(得分:1)
您的确切需求是apache-commons的MultiMap功能
MultiMap dict = new MultiHashMap();
dict.put("a", "apple");
dict.put("a", "ajar");
.
.
.
dict.put("u", "umbrella");
dict.put("y", "yolk");