0

我有团队 ArrayList 的课程,我想删除名称为“FREE”的团队;

所以我尝试了:

 public void removeFree()
{

    for (int i = 0 ; i < numberOfTeams ; i++ )
    {
        if (this.getListOfTeams().get(i).getName() == "FREE")
        {
            this.getListOfTeams().remove(i);
        }
        else
        {}
    }
}

这使我的应用程序崩溃。

4

3 回答 3

3

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

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

应该

    if (this.getListOfTeams().get(i).getName().equals("FREE"))

还要添加更多,即使您使用 equals() ,您也会ConcurrentModificationException在迭代它时从 arrayList 中删除元素。您必须使用迭代器并从中删除元素。

Iterator<Team> itr = getListOfTeams.iterator();
while(itr.hasNext()){
  if (itr.next().getName().equals("FREE"))
        {
            itr.remove();
        }
        else
        {}
}
}
于 2013-02-11T10:54:09.990 回答
2

List在迭代时删除元素,将 anIteratorremove方法一起使用会更安全:

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

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

于 2013-02-11T10:57:47.710 回答
0

您在循环同一个 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
    {}
}

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

于 2013-02-11T10:56:35.813 回答