如何将HashMap与List <number> </number>一起使用

时间:2013-10-08 02:39:50

标签: java list arraylist numbers hashmap

如何正确实例化HashMap,其值为List<Number>的变体 - 即,值可采用List<Long>和/或List<Double>的形式。这是我到目前为止所尝试的内容:

HashMap<String, List<Number>> foo = new HashMap<String, List<Number>>();
foo.put("Tenticles", new ArrayList<Long>());

错误消息:The method put(String, List<Number>) ... is not applicable for the arguments (String, List<Long>)

我还希望能够将Long添加到成分List<Long>,同样可以添加Double

编辑 这些答案未显示如何将LongDouble添加到其中一个成分列表中。

3 个答案:

答案 0 :(得分:3)

您可以使用wildcards

e.g。

Map<String, List<? extends Number>> foo = new HashMap<String, List<? extends Number>>();

如果您使用的是Java 7,则可以执行以下操作以避免重复操作

Map<String, List<? extends Number>> foo = new HashMap<>();

将项目添加到列表

List<Long> longs= new ArrayList<>();
longs.add(10L);
foo.put("numbers", longs);

答案 1 :(得分:2)

使用通配符

HashMap<String, List<? extends Number>> foo = new HashMap<String, List<? extends Number>>();
LinkedList<Long> list = new LinkedList<>();
list.add(10L);
foo.put("Tenticles", list);

您的List对象现在必须是Number的子类型。

答案 2 :(得分:0)

以下是您需要做的事情: -

    final HashMap<String, List<? extends Number>> foo = new HashMap<>();
    foo.put( "Tenticles", new ArrayList<Long>() );

语法List<? extends Number>表示每个对象实现Number的对象列表。