我正在尝试搜索数组列表以找到一个值(可能会再次出现)并删除该值的所有示例。我还想从一个单独的数组列表中删除位于同一位置的值。两个数组列表都是 ArrayList<String>
.
例如,我在arraylist2中查找数字5:
ArrayList 1 ArrayList2
cat 1
pig 2
dog 5
chicken 3
wolf 5
一旦我在这两个位置找到数字5,我想从arraylist1中删除dog和wolf。我的代码没有错误,但它似乎并没有真正删除我所要求的内容。
//searching for
String s="5";
//for the size of the arraylist
for(int p=0; p<ArrayList2.size(); p++){
//if the arraylist has th value of s
if(ArrayList2.get(p).contains(s)){
//get the one to remove
String removethis=ArrayList2.get(p);
String removetoo=ArrayList1.get(p);
//remove them
ArrayList2.remove(removethis);
ArrayList1.remove(removetoo);
}
}
当我打印数组列表时,它们看起来基本上没有变化。有人知道我做错了什么吗?
8条答案
按热度按时间a0zr77ik1#
我认为contains方法比较了这两个对象。但是,对象“s”与arraylist中的对象不同。您应该使用类型化数组(即arraylist),并确保比较每个对象的值,而不是对象本身。。。
3okqufwl2#
您可能希望检查arraylist的indexof()方法,但在迭代列表元素时从列表中删除时必须小心。
sg2wtvxw3#
这里有一个简单的解决方案:
qzlgjiam4#
如果您想迭代一个集合并删除同一集合的元素,那么您必须使用
Iterator
,例如:编辑
在您的情况下,您必须手动增加一个变量才能从其他列表中删除项。
ifmq2ha25#
你应该按以下方式申报你的名单-
而不是
contains
方法使用equals
方法。也可以在迭代列表时使用
Iterator
你可以得到如下结果-kyxcudwk6#
我同意makoto的观点,使用map可能更有益。如果只使用arraylist2的值进行搜索,则一个键有多个值。例如,5表示狗和狼。为此,您可以向键-5添加一个值列表。
所以当你需要删除5的所有值时,你需要
它将删除包含狗和狼的列表。
xcitsw887#
当您循环并从数组中删除项时,您编写的算法是不正确的,因为它会跳过每次删除后的下一项(由于您递增p的方式)。考虑以下替代方案:
v64noz0r8#
可以使用两个迭代器:
尽管已经指出,使用Map可能更容易。