Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Arraylist删除元素_Java - Fatal编程技术网

Java 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)

我有一个java代码,其中有一个ArrayList,并希望从ArrayList中删除元素

   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。另请参阅,并发布一些示例。非常感谢,这是真正的使用完整。非常感谢,这是真正的使用完整。