Java 如何从arraylist中删除对象

Java 如何从arraylist中删除对象,java,android,arraylist,Java,Android,Arraylist,我有一个团队的ArrayList类,我想删除名为“FREE”的团队 所以我试着: public void removeFree() { for (int i = 0 ; i < numberOfTeams ; i++ ) { if (this.getListOfTeams().get(i).getName() == "FREE") { this.getListOfTeams().remove(i);

我有一个团队的ArrayList类,我想删除名为“FREE”的团队

所以我试着:

 public void removeFree()
{

    for (int i = 0 ; i < numberOfTeams ; i++ )
    {
        if (this.getListOfTeams().get(i).getName() == "FREE")
        {
            this.getListOfTeams().remove(i);
        }
        else
        {}
    }
}
public void removeFree()
{
对于(int i=0;i
这使我的应用程序崩溃。

使用,equals()方法检查两个字符串是否有意义地相等
=
运算符只检查两个引用变量是否引用同一对象

    if (this.getListOfTeams().get(i).getName() == "FREE")
应该是

    if (this.getListOfTeams().get(i).getName().equals("FREE"))
此外,要添加更多内容,即使使用equals(),在遍历arrayList时从arrayList中删除元素时也会得到
ConcurrentModificationException
。您必须使用迭代器并从中删除元素,而不是

Iterator<Team> itr = getListOfTeams.iterator();
while(itr.hasNext()){
  if (itr.next().getName().equals("FREE"))
        {
            itr.remove();
        }
        else
        {}
}
}
Iterator itr=getListOfTeams.Iterator();
while(itr.hasNext()){
if(itr.next().getName().equals(“FREE”))
{
itr.remove();
}
其他的
{}
}
}
使用,equals()方法检查两个字符串是否有意义地相等
=
运算符只检查两个引用变量是否引用同一对象

    if (this.getListOfTeams().get(i).getName() == "FREE")
应该是

    if (this.getListOfTeams().get(i).getName().equals("FREE"))
此外,要添加更多内容,即使使用equals(),在遍历arrayList时从arrayList中删除元素时也会得到
ConcurrentModificationException
。您必须使用迭代器并从中删除元素,而不是

Iterator<Team> itr = getListOfTeams.iterator();
while(itr.hasNext()){
  if (itr.next().getName().equals("FREE"))
        {
            itr.remove();
        }
        else
        {}
}
}
Iterator itr=getListOfTeams.Iterator();
while(itr.hasNext()){
if(itr.next().getName().equals(“FREE”))
{
itr.remove();
}
其他的
{}
}
}

在循环相同的ArrayList时,您试图删除一个项。您需要首先克隆,迭代克隆的列表,然后删除第一个指针的项

请考虑这个:

List<Object> arrayToIterate = getListOfTeams().clone();
for (int i = 0 ; i < numberOfTeams ; i++ )
{
    if (tarrayToIterate.get(i).getName().equals("FREE"))
    {
        this.getListOfTeams().remove(i);
    }
    else
    {}
}
List arrayToIterate=getListOfTeams().clone();
对于(int i=0;i

此外,您正在将字符串与==进行比较,而不是与equals进行比较。

在循环相同的ArrayList时,您正在尝试删除项。您需要首先克隆,迭代克隆的列表,然后删除第一个指针的项

请考虑这个:

List<Object> arrayToIterate = getListOfTeams().clone();
for (int i = 0 ; i < numberOfTeams ; i++ )
{
    if (tarrayToIterate.get(i).getName().equals("FREE"))
    {
        this.getListOfTeams().remove(i);
    }
    else
    {}
}
List arrayToIterate=getListOfTeams().clone();
对于(int i=0;i

此外,您正在将字符串与==而不是等于进行比较。

要在迭代时从
列表中删除元素
,使用
迭代器
以及
删除
方法更安全:

for (Iterator it = getListOfTeams().iterator;it.hasNext();) {
    String name = it.next();
    if ("FREE".equals(name) {
        it.remove();
    }
    else{}
}

请注意Java中的字符串值比较通常应该如何通过
String.equals()
方法进行
=
是引用相等运算符。请参见

要在迭代时从
列表中删除元素
,使用
迭代器
删除
方法更安全:

for (Iterator it = getListOfTeams().iterator;it.hasNext();) {
    String name = it.next();
    if ("FREE".equals(name) {
        it.remove();
    }
    else{}
}

请注意Java中的字符串值比较通常应该如何通过
String.equals()
方法进行
=
是引用相等运算符。请参见

它还可以帮助避免NPE在文本字符串
“FREE”
上调用
equals()
。它还可以帮助避免NPE在文本字符串
“FREE”
上调用
equals()
。我想你的
循环中有一个错误。
it.hasNext()
不应该是条件,而不是更新吗?我想您的
for
循环中有一个错误。
it.hasNext()
不应该是条件,而不是更新吗?