假设我有一个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,这显然不起作用。
您会推荐什么?
答案 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]