如何从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()) { ; }