如何从arraylist中删除对象

时间:2013-02-11 10:53:22

标签: 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);
        }
        else
        {}
    }
}

这使我的应用程序崩溃。

3 个答案:

答案 0 :(得分: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
        {}
}
}

答案 1 :(得分:2)

要在迭代时从List移除元素,使用Iteratorremove方法更安全:

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

请注意Java中的字符串值比较通常应该通过String.equals()方法完成。 ==是引用相等运算符。见How do I compare strings in Java?

答案 2 :(得分: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
    {}
}

您还要将字符串与==而不是等于进行比较。