首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确地从ArrayList中删除对象?

如何正确地从ArrayList中删除对象?
EN

Stack Overflow用户
提问于 2013-10-07 17:01:30
回答 3查看 10.2K关注 0票数 4

我正在尝试从ArrayList中删除对象。每个Item对象有3个属性: 1. itemNum;2.信息;3.成本。我还有3个类,1. Item类定义了存储在目录中的单个项目。2. Catalog类维护Item对象的列表。3使用main方法的客户机类。我在Item类中有sets和gets,在Catalog中有ArrayList。在客户端,我会提示“Enter In the itemNum to remove.如何根据对itemNum的搜索从ArrayList中正确删除Item对象?下面是我的代码和到目前为止我已经尝试过的代码。

代码语言:javascript
复制
 Public class Item 
 {
 private int itemNum;
  private String info;
  private double cost;
  private int itemNum;


   public Item()
  {   //start constructor
     itemNum = 0;   //default values
     info = "x";
     cost = 0;
  }   //end constructor


 public CatalogItem(int newItemNum, String newInfo, double newCost)
  {   //start overload constructor
     this.itemNum = newItemNum;
     this.info = newInfo;
     this.cost = newCost;
  }   //end overload constructor

//下面是itemNum的set/gets。我也有成本和信息的设置/获取,但选择不包括do to space

代码语言:javascript
复制
  public int getItemNum()
  {   //start itemNum accessor
     return itemNum;

  }   //end getItemNum

  public void setItemNum(int newItemNum)
  {   //start itemNum mutator
     this.itemNum = newItemNum;
  }   //end setItemNum
  }   //end Item class

  public boolean equals(CatalogItem obj)
  {   //start equals
     if (itemId == obj.itemId)
        return true;
     else
        return false;
  }   //end equals

//下面是我的目录类

代码语言:javascript
复制
 import java.util.*;

  public class Catalog
 {   //start class
  private ArrayList<CatalogItem> listOfObjects = new ArrayList<CatalogItem>(100);   //creates ArrayList
  Item newItem = new Item(newItemNum, newInfo, newCost);   

  public void remove(int id)
  {   //start remove
     int item = id;

     for (int index = 0; index < listOfObjects.size();        index++)
        if (newItem.getItemId() == item)   //if item in the inventory matches the item number passed  
        listOfObjects.remove(index);  //removes based on index, I’ve also tried listOfObjects.remove(item);

   /*   I’ve also tried an enhanced for loop
     for (CatalogItem obj : listOfObjects)
        if (newItem.getItemId() == item)
           listOfObjects.remove(newItem);         */


  }   //end remove

}

//下面是main。它接收来自用户的关于itemNum、信息和成本的输入

代码语言:javascript
复制
 import java.util.*;   //allows use of Scanner class

   public class Client
  {   //start client class

  public static void main(String[] args)
  {   //start main
     Catalog serv = new Catalog();   //creates instance of Catalog class
     Scanner scan = new Scanner(System.in);   //creates instance of Scanner class called scan
              System.out.print("\nEnter in the Item ID you want to remove: ");  
              id = scan.nextInt();
              serv.remove(id);   //sends id to Catalog Class to be removed
 }   //end main
 }   //end class

它可以很好地编译,但不会根据找到的索引删除。任何帮助都是最好的。

EN

Stack Overflow用户

发布于 2013-10-07 17:28:33

要从列表中删除对象,您需要首先找到该对象。您可以实现Comparable接口并重写compareTo()方法来查找对象。

代码语言:javascript
复制
Public class CatalogItem implements Comparable
{
 private int itemNum;
 private String info;
 private double cost;
 private int itemNum;


public Item()
{   //start constructor
 itemNum = 0;   //default values
 info = "x";
 cost = 0;
}   //end constructor


public CatalogItem(int newItemNum, String newInfo, double newCost)
{   //start overload constructor
 this.itemNum = newItemNum;
 this.info = newInfo;
 this.cost = newCost;
}   //end overload constructor

public int compareTo(catalogItem c){
  if(c.getItemNum == this.getItemNum()){
     return 0;// zero means both are equal
  }
}
}

当您获得itemNum表单输入时,创建一个CatalogItem对象并设置此值,然后遍历list以检查相等性。如果您找到它,则从列表中删除,但请确保您没有从相同的列表中删除,否则您可能会得到Concurrency Exception

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19220691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档