我有一个方法可以将元素添加到arraylist中 我的任务是修改addProduct方法以便新产品 无法添加到具有相同ID的产品列表中 作为一个现有的。
由于数字和字符串都在同一个单词“item”中并存储在同一个索引中,我不知道如何才能获得该数字。我需要测试号码以查看号码是否已存在
关于我应该怎么做的任何建议?
我添加到arraylist的方式如下所示:
(new Product(132, "Clock Radio"))
public void addProduct(Product item)
{
stock.add(item);
}
答案 0 :(得分:4)
我强烈建议您在addProduct()
方法中使用Set
。
来自Javadocs,
SET
不包含重复元素的集合。更正式的,集合 不包含元素e1和e2对,使得e1.equals(e2)和at 大多数一个null元素。
像这样实施,
public static boolean checkDuplicate(ArrayList list) {
HashSet set = new HashSet();
for (int i = 0; i < list.size(); i++) {
boolean val = set.add(list.get(i));
if (val == false) {
return val;
}
}
return true;
}
答案 1 :(得分:1)
public void addProduct(Product item){
for (Product p: stock)
if (p.getId() == item.getId())
return;
stock.add(item);
}
答案 2 :(得分:1)
我会使用java.util.Set。您需要根据传递给构造函数的两个字段实现Product类的equals()和hashcode()方法。
答案 3 :(得分:1)
尝试使用HashMap,其中ID为Key,Item为Value。在HashMap中,您无法使用相同的Key复制Items,因此您的问题将在编程的底部得到解决。 :)
答案 4 :(得分:0)
创建一个ProductList类,它具有一个ArrayList字段和一个整数集,用于跟踪已添加的ID。添加项目时,请检查该项目是否已包含项目的ID。如果没有,请将项添加到ArrayList。所以这基本上很好地包装了一个ArrayList。我就是这样做的:
public class ProductList{
...
private ArrayList<Product> list = new ArrayList<Product>();
private Set<Integer> ids = new Set<Integer>();
...
public void addProduct(Product product){
if(!ids.contains(product.getID())){
list.add(product);
ids.add(product.getID());
}
}
public Product removeProduct(Product product){
if(!list.contains(product)) return null;
ids.remove(product.getID());
return list.remove(product);
}
...
}
然后您可以使用
ProductList stock = new ProductList();
和stock.addProduct(Product item);
在您的其他课程中。
如果您认为您将广泛使用您的列表,那么创建实用的构造函数以与您的数据字段集成也将非常有用。
从抽象的角度来看,这是一个非常好的方法,但它可能不是最有效的方法。