Java 如何从arraylist中删除对象
我有一个团队的ArrayList类,我想删除名为“FREE”的团队 所以我试着: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);
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()
不应该是条件,而不是更新吗?