2011-12-03 85 views
0

我有一个兔子Arraylist。 每只兔子有一个String名称和一个String[]的信息。从ArrayList Java删除项目需要一个访问器

rabbit(String name, String[] informations) 

我有这些兔子在ArrayList,我们称之为rabbitlist。

我希望做一个类似的方法:

public void removerabbit(String name) 

我必须做出某种while循环我猜或每个循环得到了名字。 我做了一个访问器getName(),它提供了一个兔子的名字。 只是有问题缠绕我的大脑,弄清楚如何。应该很简单。

+0

帮助所有,我会建议你包括'兔'代码 – Kowser

回答

1

当你的Rabbit的名称是Rabbit一个唯一的标识符,可以覆盖的Rabbitequals方法只检查名称。在这种情况下,removeRabbit方法变得非常简单,因为ArrayList的内置移除方法使用equals方法来确定要移除哪个元素。

public void removeRabbit(String rabbitName){ 
    //just create a new Rabbit with rabbitName as name, 
    //and remove it from the list 
    rabbitList.remove(new Rabbit(rabbitName)); 
} 

如果这是不可能的,你可以迭代列表。以下代码将删除具有指定名称的所有Rabbit。如果你只想删除第一只兔子,那么一旦你移除了第一只兔子,你应该停止循环。

public void removeRabbit(String name){ 
    Iterator<Rabbit> rabbitIterator = rabbitList.iterator(); 
    while (rabbitIterator.hasNext()) { 
    Rabbit next = rabbitIterator.next(); 
    if (name.equals(next.getName())){ 
     rabbitIterator.remove(); 
    } 
    } 
} 
+0

你可以解释迭代? 我知道while循环和句子。 – Swupper

+0

http://en.wikipedia.org/wiki/Iterator很好地解释了Iterator的概念 – Robin

+0

@Swupper - 听起来您需要花时间阅读Oracle Java教程...或者一本好的Java教科书。 –

0

你需要java.util.Iterator中能够对列表进行迭代过程中删除项

Iterator<Rabbit> it = rabbits.iterator(); 
String nameForRemove = "rabbitName"; 
while(it.hasNext()) { 
    if(it.next().getName().equals(nameForRemove)) it.remove(); 
} 
0

你将不得不遍历通rabbitList找到兔子给name.Get其对rabbitList指数,并从rabbitList 删除您的代码应该是这样的,

public boolean removeRabbit(String name){ 
Rabbit rabbit; 
Iterator it = rabbitList.iterator(); 
while (it.hasNext()) { 
    rabbit=it.next(); 
    if(name.equals(rabbit.getName()){  
     int index =rabbitList.indexOf(rabbit); 
     //remove rabbit at this index,returns boolean 
     return rabbitList.remove(index); 
     } 
    } 
return false; 
} 

这将工作可能是有了一些变化......

编辑:

public boolean removeRabbit(String name){ 
Rabbit rabbit; 
int index; 
Iterator it = rabbitList.iterator(); 
while (it.hasNext()) { 
    rabbit=it.next(); 
    if(name.equals(rabbit.getName()){  
     index =rabbitList.indexOf(rabbit); 
     } 
    } 
//remove rabbit at this index,returns boolean 
return rabbitList.remove(index); 
} 

这将工作可能会有一些变化...

+0

迭代时,您不应该从列表中删除元素。将其从迭代器中移除 – Robin

+0

@Robin:迭代时为什么不能删除? –

+0

请参阅http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html#remove() – Robin

相关问题