将ArrayList的每个元素添加到另一个ArrayList的每个元素

时间:2013-04-24 17:49:51

标签: java arraylist

我有一个有N个项目的ArrayList。我想迭代ArrayList,并将ArrayList中的每个项添加到另一个ArrayList中的等效项。我试过这个,但它不起作用:

ArrayList<Integer> arrList1 = new ArrayList<Integer>();

for(String key: myMap.keyValues() {
    ArrayList<Integer> dynArrList = getArrayListFromSomewhereElse();

    for(Integer i : dynArrList) {
       arrList1.set(i, arrList1.get(i) + dynArrList.get(i)); // sum each item
    }
}

我得到索引越界异常。我试图初始化arrList1,但没有区别。我也尝试为它设置最小尺寸。

3 个答案:

答案 0 :(得分:3)

您没有提供两个整数列表来汇总。您有[{1}}作为加数,结果为dynArrList。但是你没有第二个加数,它应该告诉你,你还没有真正理解你的问题。您的真实任务不是您认为的,或者您没有正确地确定从哪里获取数据。

所以,假设你有两个arrList1。尽可能编程到接口。你会如何逐项总结?写一个求和方法,并识别如果这两个列表的大小不同会发生什么。

List<Integer>

确定要添加的内容,并使用此内容。

现在,假设你有分配来计算两个整数数组列表的点积。您可能需要两件事 - 一种方法来对一个列表的元素求和,以及一种获取产品向量的方法。这可能是浪费,因为你可能不需要中间列表,而且你会浪费空间。第一项任务很简单:

public List<Integer> sum(List<Integer> left, List<Integer> right) {
    if (left.size() != right.size()) {
        // A runtime exception you write saying that you can't add two
        // arrays of different sizes.
        throw new VectorShapeException(left.size(), right.size());
    }
    List<Integer> vectorSum = new ArrayList<>();
    for (int i = 0; i < left.size(); ++i) {
        vectorSum.add(left.get(i) + right.get(i));
    }
    return vectorSum;
}

第二个很容易;只需复制和重命名:

public int sum(List<Integer> list) {
    int total = 0;
    for(Integer element: list) {
        total += element;
    }
   return total;
}

但这里有一个乏味的问题。剪切和粘贴以及修改是我没有真正想到的标志。 2参数和和产品方法之间唯一真正的区别是运算符和名称。这导致函数式编程,现在可能太多了。

答案 1 :(得分:1)

索引越界异常来自你的循环:

for(Integer i : dynArrList) {
    arrList1.set(i, arrList1.get(i) + dynArrList.get(i));
}

在这种情况下,i不是列表的索引。无法保证您的任何列表都包含i个元素。您可能需要一个标准的for循环:

for(int i = 0; i < dynArrList.size(); i++) {
    arrList1.set(i, arrList1.get(i) + dynArrList.get(i));
}

另外,如果您要计算任何类型的总和,您需要确保两个列表具有相同数量的元素,或者您只需要确定两个列表中较短的一个列表。

答案 2 :(得分:0)

如果arrList1上没有任何内容,你如何将元素设置为arrList1.get(i)+ dynArrList.get(i)?必须存在缺少的步骤,其中设置了arrList1值。如示例中所写,使用.add代替.set。

ArrayList<Integer> arrList1 = new ArrayList<Integer>();//has no values and no size

ArrayList<Integer> dynArrList = getArrayListFromSomewhereElse();

for(Integer i : dynArrList) {
   arrList1.add(i); // sum each item
}

或使用中间ArrayList来执行合并/最终列表。

ArrayList<Integer> arrList1 = getArrayFromALocation();//may have values and size
ArrayList<Integer> dynArrList = getArrayListFromSomewhereElse();
ArrayList<Integer> mergedList1 = new ArrayList<Integer>();

for(int i =0; i<  dynArrList.size(); i++) {//assuming larger
if ( i < arrList1 .size() )
   mergedList1.add(new Integer(dynArrList.get(i).intValue()+(arrList1 .get(i).intValue())); // sum each item
else
    mergedList1.add(new Integer(dynArrList.get(i).intValue()+0));
}
}
return mergedList1;