0

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

如果您想澄清,请不要犹豫。

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 与以前不同。

4

4 回答 4

0
ListUtils.sum(Arrays.asList(firstarray),Arrays.asList(secondarray))
于 2013-03-15T07:31:00.543 回答
0

你在这里没有做你真正想做的事情。您从比较数组中删除其值为 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);
    }
}
于 2013-03-15T07:31:26.547 回答
0

你不需要你的计数器阵列。如果您使用迭代器,则可以一步进行比较。我相信这应该有效:

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 与以前不同。

于 2013-03-15T07:32:22.553 回答
0
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);

    }

}
于 2013-03-15T07:37:48.883 回答