【问题标题】:How to use HashMap with List<Number>如何将 HashMap 与 List<Number> 一起使用
【发布时间】:2013-10-14 19:32:31
【问题描述】:

如何正确实例化一个 HashMap,其值是 List&lt;Number&gt; 的变体 - 即,这些值可以采用 List&lt;Long&gt; 和/或 List&lt;Double&gt; 的形式。到目前为止,这是我尝试过的:

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

错误消息:The method put(String, List&lt;Number&gt;) ... is not applicable for the arguments (String, List&lt;Long&gt;)

我还希望能够将Long 添加到成员List&lt;Long&gt; 以及任何Double

编辑这些答案没有显示如何将 LongDouble 添加到组成列表之一。

【问题讨论】:

  • 如果你可以让它工作,这将是一件棘手的事情,因为协方差的东西会变得混乱。不过,您完全可以使用foo.put("Tenticles", new ArrayList&lt;Number&gt;()) 使其工作。

标签: java list arraylist numbers hashmap


【解决方案1】:

您可以使用wildcards

例如

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);

【讨论】:

  • 我如何向里面的arraylist添加一些东西
  • 您可以通过多种方式进行操作。这是一个例子: List longs = new ArrayList(); longs.add(10L); List doubles = new ArrayList();双打.add(23.20); List 数字 = new ArrayList(); numbers.addAll(longs); numbers.addAll(双打); foo.put("数字", 数字);我为格式道歉。 :P
  • 答案现在包含一个将元素添加到地图中包含的列表的示例
【解决方案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 的子类型。

【讨论】:

  • 我如何向里面的arraylist添加一些东西
  • @user2763361 只需保留对List 的引用并使用您要添加的元素调用其add 方法。您始终可以使用get(int) 检索List
  • 它不起作用。 The method add(capture#7-of ?) in the type ... not applicable for the arguments long.
  • @user 请用您尝试使用它的方式更新您的问题。它对我来说很好。
  • foo.get("Tenticles").add(10L).
【解决方案3】:

这是你需要做的:-

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

语法List&lt;? extends Number&gt; 表示一个对象列表,其中每个对象都实现Number

【讨论】:

  • 我如何向这个数组列表添加一些东西?它不起作用:s
猜你喜欢
  • 2017-04-20
  • 2020-11-07
  • 2021-05-18
  • 2011-01-13
  • 2021-01-08
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多