在这个方法中,我试图将一个arraylist中的所有元素与另一个arraylist中的所有元素进行比较。然后,如果第一个arraylist中的元素不等于第二个arraylist中的任何元素,则删除该元素。在比较步骤或删除步骤中有些问题,但我不确定是哪一个。任何帮助将不胜感激。
如果您想澄清,请不要犹豫。
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与以前不同。
答案 0 :(得分:0)
ListUtils.sum(Arrays.asList(firstarray),Arrays.asList(secondarray))
答案 1 :(得分: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);
}
}
答案 2 :(得分: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与以前不同。
答案 3 :(得分: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);
}
}