我有团队的ArrayList课程,我想要删除名为“FREE”的团队;
所以我试过了:
public void removeFree()
{
for (int i = 0 ; i < numberOfTeams ; i++ )
{
if (this.getListOfTeams().get(i).getName() == "FREE")
{
this.getListOfTeams().remove(i);
}
else
{}
}
}
这使我的应用程序崩溃。
答案 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
移除元素,使用Iterator
和remove
方法更安全:
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
{}
}
您还要将字符串与==而不是等于进行比较。