【问题标题】:Is there a way to put all the values of a HashMap in an array?有没有办法将 HashMap 的所有值放入数组中?
【发布时间】:2020-11-19 15:47:18
【问题描述】:

我有一个HashMap,比方说,条目{1=1, 3=2, 4=1, 5=1, 6=1} 。我希望能够创建一个只包含[1,2,1,1,1] 的数组。这可能吗?

为了提供一些上下文,我正在尝试使用索引来获得可以迭代的东西,并且像数组或 ArrayList 这样的任何东西都可以工作(项目的顺序很重要)。

我尝试使用将值分配给数组

for (int j=0; j< frequencies.size(); j++){
    for (int i : frequencies.values()) {
        arr[j] = i;
    }
}

frequencies.values()(频率是我的 HashMap 的名称)没有特别的用途,我尝试迭代它(没有工作)并将其分配给 Collections 没有用。我也尝试将 myHashMap.values() 分配给 ArrayList,这显然不起作用。

你会推荐什么?

【问题讨论】:

  • new ArrayList&lt;&gt;(frequencies.values()) 没用?
  • @LouisWasserman 天哪,这行得通。我试过ArrayList&lt;Integer&gt; = frequencies.values()(用Collections 替换ArrayList 有效),所以我不想尝试这个。您能解释一下为什么使用 new 关键字有效吗?

标签: java arrays arraylist hashmap iterator


【解决方案1】:

这是一种有点老套的方法,但对我来说效果很好....它假设您的哈希图中的数字值是 Longs。

Collect the values from your "frequencies" hashmap: 
1. Collection<Long> values_from_hashmap = frequencies.values(); 
        
Create an array list from the collection of values:

2. ArrayList<Long> listOfValues = new ArrayList<Long>(values_from_hashmap);

你的 listOfValues 数组列表将包含来自原始哈希映射的值

【讨论】:

    【解决方案2】:

    有没有办法将 HashMap 的所有值放入一个数组中?

    由于您确实指定了一个数组作为目标,因此您可以这样做。

    Map<Integer,Integer> map = new HashMap<>(Map.of(1,1,3,2,4,1,5,1,6,1));
    int[] vals = map.values().stream().mapToInt(Integer::valueOf).toArray();
    
    System.out.println(Arrays.toString(vals));
    

    打印

    [1, 2, 1, 1, 1]
    

    【讨论】:

      【解决方案3】:

      frequencies.values() 的类型是通用的Collection,不一定是ArrayList。因此,要将其转换为ArrayList,您必须复制它——幸运的是,ArrayList 有一个接受通用Collection 并复制它的构造函数。因此,您所要做的就是写new ArrayList&lt;&gt;(frequencies.values())

      【讨论】:

        猜你喜欢
        • 2013-01-30
        • 1970-01-01
        • 1970-01-01
        • 2020-04-16
        • 2021-02-04
        • 1970-01-01
        • 1970-01-01
        • 2013-07-01
        • 1970-01-01
        相关资源
        最近更新 更多