提问者:小点点

将一个数组列表与另一个数组列表进行比较并删除额外的项目java


在这种方法中,我试图将一个数组列表中的所有元素与另一个数组列表中的所有元素进行比较。然后,如果第一个数组列表中的元素不等于第二个数组列表中的任何元素,请删除该元素。比较步骤或删除步骤都有问题,但我不确定是哪一个。任何帮助都将不胜感激。

如果你想澄清,不要犹豫,问。

public static ArrayList<Integer> compareArrayandList(ArrayList<Integer>compare, ArrayList<Integer>array2) {
    int[] counter = new int[compare.size()];

    for (int x: counter) {
        x = 0;
    }
    for (int i = 0; i < compare.size(); i++) {
        counter[i] = 0;
        for (int number: array2) {
            if (compare.get(i) ==number) {
                counter[i]++;
            }

        }

    }
    for (int i=0; i<counter.length;i++) {
        if (counter[i]==0) {
            compare.remove(new Integer(i));
        }
    }

    return compare;
}

编辑:(由Memento Mori提供)您的代码不起作用的原因是当您删除元素时,ArrayList中的位置正在发生变化。假设您删除了元素3。现在元素3与以前不同了。


共3个答案

匿名用户

public class Test {

    public static ArrayList<Integer> compareArrayandList(ArrayList<Integer>compare, ArrayList<Integer>array2) {
        ArrayList<Integer> a3 = new ArrayList<Integer>();               
        for (Integer a : compare)
        {
            if(array2.contains(a))
                a3.add(a);
        }
            System.out.println(a3);
        return a3;
    }

    public static void main(String[] args) {
        ArrayList<Integer> a1=new ArrayList<Integer>();
        ArrayList<Integer> a2=new ArrayList<Integer>();
        a1.add(1);
        a1.add(5);
        a1.add(3);
        a2.add(3);
        a2.add(4);
        a2.add(5);
        a2.add(6);
        Test test=new Test();
        test.compareArrayandList(a1,a2);

    }

}

匿名用户

您没有在这里做您真正想做的事情。您从比较数组中删除其值为i的元素,而不是在第二个for循环中找不到的位置i的元素。

for (int i=0; i<counter.length;i++) {
    if (counter[i]==0) {
        //compare.remove(new Integer(i));  // problem is here!
        // remove element at index i not element equals to i
        compare.remove(i);
    }
}

匿名用户

您不需要计数器数组。如果您使用迭代器,您可以一步完成比较。我相信这应该可行:

public static ArrayList<Integer> compareArrayandList(ArrayList<Integer>compare,   ArrayList<Integer>array2) {
    ListIterator<Integer> iter = compare.listIterator(compare.size());
    while (iter.hasPrevious()){
        Integer a = new Integer(iter.previous());
        for (int number: array2) {
            if (a==number) iter.remove();
        }        
     }
return compare;
}

编辑:您的代码不起作用的原因是当您删除元素时,ArrayList中的位置正在发生变化。假设您删除了元素3。现在元素3与以前不同。