在java中将较大的arrayList添加到较小的arrayList中

时间:2014-09-25 10:32:03

标签: java collections

我遇到了问题,不知道如何开始,请帮助。

我有两个ArrayList,一个是smaler,另一个是更大的,现在我必须将值从较大的列表添加到较小的列表,但保留了两个列表中的所有值

例如,我们有两个arrayLists

  ArrayList1[1,2,3]
  ArrayList2[3,5,7,5]

  ArrayListResult[4,7,10,5]

3 个答案:

答案 0 :(得分:2)

只需并行处理两个迭代器中的元素,同时汇总值,并构建新的结果数组列表。

完成最短列表后,您只需浏览较长的列表iterator,然后将值附加到结果列表中。

这样的事情:

List<Integer> l1 = ...;  // shorter
List<Integer> l2 = ...;  // longer
List<Integer> result = new ArrayList<Integer>();  // result

Iterator<Integer> i1 = l1.iterator();
Iterator<Integer> i1 = l2.iterator();

// Add the numbers as long as both lists have elements at that position
while(i1.hasNext() && i2.hasNext()) {
    result.append(i1.next() + i2.next());
}

// Append the remaining elements.
// Note that it's not possible for both lists to have remaining elements.
while(i1.hasNext()) {
    result.append(i1.next());
}
while(i2.hasNext()) {
    result.append(i2.next());
}

答案 1 :(得分:0)

试试这个:

int l1 = ArrayList1.size(); int l2 = ArrayList2.size();
int max = Math.max(l1, l2);
ArrayList<Integer> ArrayListResult = new ArrayList<Integer>(max);


for (int i = 0; i<max; i++ ) {

    ArrayListResult.set(i,0);
    if(i < l1) {
         ArrayListResult.set(i,ArrayList1.get(i)+ArrayListResult.get(i));
    }
    if(i < l2) {
         ArrayListResult.set(i,ArrayList2.get(i)+ArrayListResult.get(i));
    }
}

可能是比在循环中进行2次测试更优雅的解决方案,但这应该有效。

答案 2 :(得分:0)

如果你有这样的支票怎么办?

假设我的ArrayList A是[0,1,2]而B是[3,4,5,6]

我会检查他们的尺寸,如果A尺寸小于那么我会在结尾添加零。

然后它不会抛出异常,我可以继续添加..

请尝试以下代码:

List<Integer> A = new ArrayList<Integer>();
        List<Integer> B = new ArrayList<Integer>();
        List<Integer> result = new ArrayList<Integer>();
        for (int i = 0; i <= 2; i++) {
            A.add(i);
        }

        System.out.println("A list is below................");
        for (Integer a : A) {

            System.out.println(a);
        }
        for (int i = 3; i <= 6; i++) {
            B.add(i);
        }
        if(A.size()<B.size()){
            A.add(0);
        }
        System.out.println("B list is below................");
        for (Integer b : B) {

            System.out.println(b);
        }
        for (int i = 0; i <=B.size()-1; i++) {
            result.add(A.get(i) + B.get(i));
        }
        System.out.println("After Adding .................");
        for (Integer r : result) {

            System.out.println(r);
        }