如何在java中从linkedlist中删除数据
我正在android中创建一个演示购物车,为此我使用应用程序类来保存数据。我无法从linkedlist中删除数据。我正在为android活动调用removeItem()函数,以从列表中删除所选项目,但它不起作用。任何人都可以帮助我如何在java中从linkedlist中删除数据,java,android,singly-linked-list,Java,Android,Singly Linked List,我正在android中创建一个演示购物车,为此我使用应用程序类来保存数据。我无法从linkedlist中删除数据。我正在为android活动调用removeItem()函数,以从列表中删除所选项目,但它不起作用。任何人都可以帮助我 package in.co.santoshsharma.bookshopping; import java.util.LinkedList; import android.app.Application; import android.content.re
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<GlobalData> list = new LinkedList<GlobalData>();
public void setList(String iName,int iQunt,int iCost)
{
list.add(new GlobalData( iName, iQunt, iCost));
}
public LinkedList<GlobalData> 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);
}
}
}
}
package in.co.santoshharma.bookshopping;
导入java.util.LinkedList;
导入android.app.Application;
导入android.content.res.Configuration;
公共类GlobalData扩展了应用程序{
私人字符串电子邮件;
私有字符串itemName;
私人物品数量;
私人成本;
公共全球数据(){
}
公共全局数据(字符串iName、int-iquint、int-iCost){
//TODO自动生成的构造函数存根
this.itemCost=iCost;
this.itemName=iName;
this.itemQuantity=iquint;
}
公共邮件(字符串邮件)
{
this.email=mail;
}
公共字符串getEmail()
{
回复邮件;
}
公共字符串getItemName()
{
返回itemName;
}
public int getItemCost()
{
退货成本;
}
public int getItemQunt()
{
退货数量;
}
LinkedList=新建LinkedList();
公共void集合列表(字符串iName、int-iqnt、int-iCost)
{
添加(新的GlobalData(iName、iquint、iCost));
}
公共链接列表getList()
{
退货清单;
}
public void removietem(字符串iName、int-iquint、int-iCost)
{
用于(全局数据:列表)
{
if(data.getItemName().equals(iName))
{
列表。删除(itemName);
//列表。删除(iCost);
//列表。删除(iquint);
}
}
}
}
迭代列表时,不能在列表中操作(添加、删除…项)。您必须使用迭代器
for(Iterator<EmpDedup> iter = list.iterator(); iter.hasNext();) {
EmpDedup data = iter.next();
if (data.getRecord() == rec1) {
iter.remove();
}
}
for(迭代器iter=list.Iterator();iter.hasNext();){
EMPDead data=iter.next();
if(data.getRecord()==rec1){
iter.remove();
}
}
看
从引用,您不能使用for each循环修改集合。对循环或
while
使用简单的
for-each循环隐藏迭代器,因此不能调用remove。
因此,for-each循环不可用于过滤。同样地
对于需要替换列表中元素的循环不可用
或数组遍历它
资料来源:
通常,名为list
的集合以以下方式使用迭代器来存储E
类型的元素:
Iterator<E> iterator = list.iterator();
while(iterator.hasNext()) {
<do something with iterator.next()>;
}
Iterator Iterator=list.Iterator();
while(iterator.hasNext()){
;
}
使用迭代器删除元素:
public void removeItem(String iName, int iQunt, int iCost) {
Iterator<GlobalData> iterator = list.iterator();
while (iterator.hasNext()) {
GlobalData data = iterator.next();
if (data.getItemName().equals(iName)) {
iterator.remove();
}
}
}
public void removietem(字符串iName、int-iqnt、int-iCost){
迭代器迭代器=list.Iterator();
while(iterator.hasNext()){
GlobalData=iterator.next();
if(data.getItemName().equals(iName)){
iterator.remove();
}
}
}
-您正在同时访问和修改集合
,这不能直接从为每个循环执行
-使用迭代器来解决此问题
LinkedList<GlobalData> q1 = new LinkedList<GlobalData>();
Iterator<GlobalData> iterator = q1.iterator();
while (iterator.hasNext()){
GlobalData mp = iterator.next();
if (mp.name.equals("xyz")){
iterator.remove(); // You can do the modification here.
}
}
LinkedList q1=新建LinkedList();
迭代器迭代器=q1.Iterator();
while(iterator.hasNext()){
GlobalData mp=iterator.next();
if(mp.name.equals(“xyz”)){
iterator.remove();//您可以在此处进行修改。
}
}
首先,重写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;
}
然后,更改removietem()
方法
public void removeItem(String iName) {
list.remove(iName);
// or uncomment line below to completely remove all matching elements
// for (;;list.remove(iName)) {}
}
根据LinkedList的remove()
方法,将调用提供的对象的equals()
方法,并将其与列表中的每个元素进行比较
希望这有帮助:)使用迭代器在列表中进行迭代