我正在尝试从 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/