有没有一种方法可以将HashMap的所有值放入数组中?

时间:2020-07-29 23:34:40

标签: java arrays arraylist hashmap iterator

假设我有一个HashMap,其中包含条目{1=1, 3=2, 4=1, 5=1, 6=1} 。我希望能够创建一个仅包含[1,2,1,1,1]的数组。有可能吗?

为了提供一些背景信息,我正在尝试获取一些我可以使用索引进行迭代的内容,并且像array或ArrayList之类的东西都可以工作(项目的顺序很重要)。

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

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

frequencies.values()(频率是我的HashMap的名称)不是特别有用,并且我尝试遍历该变量(无效)并将其分配给Collections都没有用。我也尝试将myHashMap.values()分配给ArrayList,这显然不起作用。

您会推荐什么?

3 个答案:

答案 0 :(得分:2)

frequencies.values()的类型是通用的Collection,不一定是ArrayList。因此,要将其转换为ArrayList,必须复制-幸运的是,ArrayList的构造函数接受通用Collection并将其复制。结果,您所要做的就是写new ArrayList<>(frequencies.values())

答案 1 :(得分: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数组列表,将包含orig哈希图中的值

答案 2 :(得分:1)

是否可以将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]