我有两个hashmap
LinkedHashMap<String, int[]> val1 = new LinkedHashMap<String, int[]>();
LinkedHashMap<String, int> val2 = new LinkedHashMap<String, int>();
每个hashmap都有不同的键和值。我试图迭代两个hashmap
在同一时间并乘以val1->int[] to val2->int
最简单,最禁食的方法是什么?我在hashmap中都有数千个值。
由于
答案 0 :(得分:1)
你可能做错了......
首先,HashMap无法存储整数,它需要适当的对象 - 如Integer - 数组是一个对象,虽然它隐藏在一些语法糖之后。
如果它们碰巧具有相同的大小,这里是如何循环两个地图, 这就是我的意思。
Iterator<int[]> expenses = val1.values().iterator();
Iterator<Integer> people = val2.values().iterator();
assert val1.size() == val2.size() : " size mismatch";
while (expenses.hasNext()) {
int[] expensesPerMonth = expenses.next();
int persons = people.next();
// do strange calculation
int strangeSum = 0;
for (int idx = 0; idx < expensesPerMonth.length; idx++) {
strangeSum += persons * expensesPerMonth[idx];
}
System.out.println("strange sum :" + strangeSum);
}
但您应该回过头来重新思考如何存储数据 - 你为什么使用地图,关键是什么?
例如,创建一个代表月费和人数组合的对象会不会更好?
答案 1 :(得分:0)
AFAIK,LinkedHashMap具有迭代排序。所以,这样的事情可能有用:
Iterator myIt1 = val1.entrySet().iterator();
Iterator myIt2 = val2.entrySet().iterator();
while(val1.hasNext() && val2.hasNext()) {
int myarray[] = val1.next();
for(int i = 0; i<myarray.length; i++) {
myarray[i] = myarray[i] * val2.next();
}
}