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

标签 java object arraylist

我正在尝试从 ArrayList 中删除一个对象。每个 Item 对象都有 3 个属性; 1. itemNum 2. info 3. cost.我还有 3 个类,1. Item 类定义存储在目录中的单个项目。 2. Catalog 类维护 Item 对象的列表。 3 带有 main 方法的客户端类。 我在 Item 类中有 sets 和 gets,在 Catalog 中有 ArrayList。在客户端中,我有提示“输入要删除的 itemNum。如何根据对 itemNum 的搜索从 ArrayList 中正确删除 Item 对象?下面是我的代码和我到目前为止尝试过的内容。

 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的设置/获取。我也有成本和信息的设置/获取,但选择不包括空间

  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

//下面是我的目录类

 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

//下面是主要内容。它接收用户关于商品编号、信息和成本的输入

 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

它编译正常,但不会根据找到的索引删除。任何帮助都会很棒。

最佳答案

重写 Item 类中的 equals 方法。您可以使用 itemNum 在 equals 方法中检查对象是否相等。

然后使用 ArrayList remove(Object o) 方法删除对象。 remove 方法在内部使用 equals 来查找要删除的对象。

编辑:

您没有正确覆盖 equals 方法,这是正确的签名和实现:

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Item other = (Item) obj;
    if (itemNum != other.itemNum)
        return false;
    return true;
}

关于java - 如何正确地从 ArrayList 中删除对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19220691/

相关文章:

java - 使用带有 AbstractThreadedSyncAdapter 的 RoboGuice 上下文注入(inject)

java - 泽西客户端测试

javascript - 当 ob1.prototype 未定义时,Object.create() 如何从 ob1.prototype 创建 obj2.__proto__ ?

java - 如何编写语句来检查我的用户指定的异常 CustomerNotEnrolledException

java - 为什么使用 poi api java 从 Excel 文件读取数据时格式会发生变化?

java - Spring junit 测试不工作

java - 怪物对象删除

php - 为什么这两个对象相等(==)?

java - 为什么我正在编写的文件中多了一行?

C - 指向字符串数组的指针