如何从java中的linkedlist中删除数据

我正在Android中创建一个演示购物车,我正在使用Application类来保存数据。 我无法从链表中删除数据。 我正在为android活动调用removeItem()函数从列表中删除所选项目,但它不起作用任何人都可以帮助我。

package in.co.santoshsharma.bookshopping; import java.util.LinkedList; import android.app.Application; import android.content.res.Configuration; public class GlobalData extends Application{ private String email; private String itemName; private int itemQuantity; private int itemCost; public GlobalData(){ } public GlobalData(String iName,int iQunt,int iCost) { // TODO Auto-generated constructor stub this.itemCost=iCost; this.itemName=iName; this.itemQuantity=iQunt; } public void setEmail(String mail) { this.email=mail; } public String getEmail() { return email; } public String getItemName() { return itemName; } public int getItemCost() { return itemCost; } public int getItemQunt() { return itemQuantity; } LinkedList list = new LinkedList(); public void setList(String iName,int iQunt,int iCost) { list.add(new GlobalData( iName, iQunt, iCost)); } public LinkedList getList() { return list; } public void removeItem(String iName,int iQunt,int iCost) { for(GlobalData data:list) { if(data.getItemName().equals(iName)) { list.remove(itemName); //list.remove(iCost); //list.remove(iQunt); } } } } 

首先,重写equals()方法并使用itemName属性进行比较

 @Override public boolean equals(Object o) { if (o == null) return false; if (itemName == null) return false; if (o instanceOf String) return itemName.equals(o); else if (o instanceOf GlobalData) return ((GlobalData) o).itemName.equals(this.itemName); else return false; } 

然后,更改您的removeItem()方法

 public void removeItem(String iName) { list.remove(iName); // or uncomment line below to completely remove all matching elements // for (;;list.remove(iName)) {} } 

根据http://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html#remove(java.lang.Object),LinkedList的 remove()方法将调用equals()方法提供的Object比较,并将其与列表中的每个元素进行比较。

希望这可以帮助 :)

在迭代它们时,你不能在列表中操作(添加,删除……项目)。 你必须使用迭代器

 for(Iterator iter = list.iterator(); iter.hasNext();) { EmpDedup data = iter.next(); if (data.getRecord() == rec1) { iter.remove(); } } 

见http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html

参考https://stackoverflow.com/a/10735435/1602230

使用迭代器删除元素:

 public void removeItem(String iName, int iQunt, int iCost) { Iterator iterator = list.iterator(); while (iterator.hasNext()) { GlobalData data = iterator.next(); if (data.getItemName().equals(iName)) { iterator.remove(); } } } 

您正在同时访问和修改Collection ,这不能直接从For-Each循环完成。

使用Iterator解决此问题。

 LinkedList q1 = new LinkedList(); Iterator iterator = q1.iterator(); while (iterator.hasNext()){ GlobalData mp = iterator.next(); if (mp.name.equals("xyz")){ iterator.remove(); // You can do the modification here. } } 

您无法使用for-each循环修改Collection。 使用简单的for循环或while

for-each循环隐藏了迭代器,因此您无法调用remove。 因此,for-each循环不可用于过滤。 类似地,它不适用于需要在遍历时替换列表或数组中的元素的循环。

资料来源: http : //docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

通常,存储E类型元素的名为list的集合以下列方式使用迭代器:

 Iterator iterator = list.iterator(); while(iterator.hasNext()) { ; }