Java итерация - PullRequest
       18

Java итерация

1 голос
/ 27 марта 2011

У меня есть два хэш-карты

LinkedHashMap<String, int[]> val1 = new LinkedHashMap<String, int[]>();
LinkedHashMap<String, int> val2 = new LinkedHashMap<String, int>();

каждый хэш-карта имеет разные ключи и значения. Я пытаюсь перебрать оба хэш-карты одновременно и умножьте каждое значение на val1->int[] to val2->int

Какой самый простой и быстрый способ сделать это? У меня есть тысячи значений в обоих хэш-картах.

Спасибо

Ответы [ 2 ]

1 голос
/ 27 марта 2011

Вы, вероятно, делаете это неправильно ...

Во-первых, HashMap не может хранить целые числа, ему нужны надлежащие объекты - например, Integer. & Ndash; Массив - это объект, хотя он скрыт за каким-то синтаксическим сахаром.

Вот как зациклить обе карты, если они имеют одинаковый размер, это то, что я имею в виду.

    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);
    }

Но вы, вероятно, должны вернуться и переосмыслить, как вы храните свои данные & ndash; почему вы используете карты, и в чем ключ?

Не лучше ли создать, например, объект, представляющий собой комбинацию ежемесячных расходов и количества людей?

0 голосов
/ 27 марта 2011

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