java linkedhashmap迭代

时间:2011-03-27 03:54:08

标签: java loops data-structures hashmap

我有两个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中都有数千个值。

由于

2 个答案:

答案 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();
    }
}