Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中从linkedlist中删除数据_Java_Android_Singly Linked List - Fatal编程技术网

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

如何在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

我正在android中创建一个演示购物车,为此我使用应用程序类来保存数据。我无法从linkedlist中删除数据。我正在为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<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()
方法,并将其与列表中的每个元素进行比较


希望这有帮助:)

使用迭代器在列表中进行迭代