Java Arraylist删除元素
我有一个java代码,其中有一个ArrayList,并希望从ArrayList中删除元素Java Arraylist删除元素,java,Java,我有一个java代码,其中有一个ArrayList,并希望从ArrayList中删除元素 ArrayList <word> wordlist=new ArrayList<>(); public void removeWord(String inputWord){ for(word z:wordlist){ if(z.getWord() == inputWord)
ArrayList <word> wordlist=new ArrayList<>();
public void removeWord(String inputWord){
for(word z:wordlist){
if(z.getWord() == inputWord)
wordlist.remove(inputWord);
System.out.println("the word" +inputWord+ "is removed");
}
System.out.println(wordlist.size());
}
ArrayList wordlist=new ArrayList();
public void removeWord(字符串输入字){
对于(单词z:wordlist){
if(z.getWord()==inputWord)
删除(输入字);
System.out.println(“删除了单词“+inputWord+”);
}
System.out.println(wordlist.size());
}
问题是该元素没有从列表中删除。您不能使用
增强for循环从正在迭代的列表中删除元素。这显然有时有效,但并不总是有效,并且会引发ConcurrentModificationException
如果要在迭代时删除元素,则必须使用,该方法具有可用于删除当前元素的方法
请参阅本教程:-了解如何使用迭代器
另外,正如其他人已经提到的,您应该使用方法来比较字符串的内容。使用==
您不会比较内容,而是比较引用。使用增强for loop
无法从正在迭代的列表中删除元素。这显然有时有效,但并不总是有效,并且会引发ConcurrentModificationException
如果要在迭代时删除元素,则必须使用,该方法具有可用于删除当前元素的方法
请参阅本教程:-了解如何使用迭代器
另外,正如其他人已经提到的,您应该使用方法来比较字符串的内容。使用==
不比较内容,而是比较引用。使用z.getWord().equals(inputWord)
比较字符串,并阅读Rohit的答案 使用z.getWord().equals(inputWord)
比较字符串,并读取Rohit的答案 在这种情况下,您需要添加一个“break”语句
public void removeWord(String inputWord)
{
for (Word z : wordlist) {
if (z.getWord().equals(inputWord)) {
wordlist.remove(z);
System.out.println("the word" + inputWord + "is removed");
break;
}
}
System.out.println(wordlist.size());
}
您需要从列表中删除word obj,因为列表是为word对象创建的。对于if-else语句也使用大括号,这是最佳代码实践。在这种情况下,您需要添加一个“break”语句
public void removeWord(String inputWord)
{
for (Word z : wordlist) {
if (z.getWord().equals(inputWord)) {
wordlist.remove(z);
System.out.println("the word" + inputWord + "is removed");
break;
}
}
System.out.println(wordlist.size());
}
您需要从列表中删除word obj,因为列表是为word对象创建的。在if-else语句中也使用大括号,这是最佳代码实践。原因?
is返回的迭代器本质上是快速失败的
此类迭代器和listIterator
方法返回的迭代器是fail fas
t:如果在创建迭代器后的任何时候,列表在结构上被修改,除了通过迭代器自己的remove或add方法,迭代器将抛出ConcurrentModificationException
。因此,在面对并发修改时,迭代器会快速、干净地失败,而不是在将来的不确定时间冒着任意、不确定行为的风险
当我不使用迭代器时,迭代器从何而来?
对于集合的增强For循环,将使用迭代器Iterator
,以便在迭代时不能调用remove方法
因此,您的循环如下所示
for (Iterator<word> i = c.iterator(); i.hasNext(); ){
现在我在哪里可以读更多?
原因?
is返回的迭代器本质上是快速失败的
此类迭代器和listIterator
方法返回的迭代器是fail fas
t:如果在创建迭代器后的任何时候,列表在结构上被修改,除了通过迭代器自己的remove或add方法,迭代器将抛出ConcurrentModificationException
。因此,在面对并发修改时,迭代器会快速、干净地失败,而不是在将来的不确定时间冒着任意、不确定行为的风险
当我不使用迭代器时,迭代器从何而来?
对于集合的增强For循环,将使用迭代器Iterator
,以便在迭代时不能调用remove方法
因此,您的循环如下所示
for (Iterator<word> i = c.iterator(); i.hasNext(); ){
现在我在哪里可以读更多?
除了Rohit的答案,“==”叹气。Equals除了Rohit的答案,“==”叹气。Equals还可以查看在迭代过程中更改列表的更多选项。(请参阅)。谢谢,因为我是java新手,我对迭代器不太了解,这意味着我必须实现迭代器并使用remove方法。但是我该如何使用remove方法,我的意思是该方法中应该包含什么条件?@coolmego。请参阅我提供的教程链接。它解释了如何使用迭代器。@coolmego。可以使用方法获取下一个元素。另外,正如Duncan提到的,您可以更好地使用ListIterator
。它有一个方法,可以为您提供它所迭代的列表中的下一个元素。@coolmego。另请参阅,并发布一些示例。另请参阅,以获取在迭代过程中更改列表的更多选项。(请参阅)。谢谢,因为我是java新手,我对迭代器不太了解,这意味着我必须实现迭代器并使用remove方法。但是我该如何使用remove方法,我的意思是该方法中应该包含什么条件?@coolmego。请参阅我提供的教程链接。它解释了如何使用迭代器。@coolmego。可以使用方法获取下一个元素。另外,正如Duncan提到的,您可以更好地使用ListIterator
。它有一个方法,可以为您提供它所迭代的列表中的下一个元素。@coolmego。另请参阅,并发布一些示例。非常感谢,这是真正的使用完整。非常感谢,这是真正的使用完整。