我正在尝试编写一个带有两个数组列表list1和list2的方法,并从两个arrayLists中找到的list1中删除对象。
public void filter( ArrayList<Object> list1, ArrayList<Object> list2 ) {
for ( int x = 0; x < list1.size() - 1; x++ ) {
for ( int i = 0; i < list2.size() - 1;i++) {
if ( list1.get( x ) == list2.get( i ) ) {
list1.remove( list1.get( x ) );
break;
}
}
}
}
//Output:
//list1 = [34, third, 99, 2]
//list2 = [first, 99, third]
//after filter(list1, list2) --> [34, third, 2]
正如您所看到的,过滤器正在取出99,这是正确的,但不是第三个 知道我做错了什么吗?
由于
编辑:我忘了提,我不能使用contains或indexOf方法答案 0 :(得分:0)
您的代码中存在一些错误:
==
代替equals
方法,因此一个与另一个完全相同的对象不会被视为匹配,这不是我们想要什么。for
循环条件为n < list.size() - 1
而不是n < list.size()
。ArrayList#remove(int index)
方法而不是ArrayList#remove(Object o)
方法。这是固定代码:
public void filter( ArrayList<Object> list1, ArrayList<Object> list2 ) {
for ( int x = 0; x < list1.size(); x++ ) {
for ( int i = 0; i < list2.size(); i++ ) {
if ( list1.get( x ).equals( list2.get( i ) ) ) {
list1.remove( x );
x--;
break;
}
}
}
}