添加到数组列表中

时间:2013-06-01 06:22:46

标签: java arraylist

我是一名Java新手..但我相信我能够以非常有效的方式完成这项工作。

此方法的目的是添加具有唯一ID的产品。如果我把产品作为重复我应该抛出异常。好吧,这个序列不适用于多线程环境。

public void addProduct(Product product)
        throws ProductAlreadyExistsException {
    product.id = ++nextId;
    this.id = product.id;

    Iterator<Product> it = allProducts.iterator();
    Product p= null;

    boolean flag= false;
    if (!allProducts.isEmpty()) {
        while(it.hasNext()){
            p= it.next();
            if ( p.getName() == product.getName())
                throw new ProductAlreadyExistsException(p.getName());
            else
                flag = true;
        }

    }
    else
        allProducts.add(product.id-1, product);

    if(flag){
        allProducts.add(product.id-1, product);
    }
}

我想要的是这样的。

    for (Product p : allProducts) {
        if (p.getName() ==  product.getName() ) {
            throw new ProductAlreadyExistsException(p.getName());
        }
            allProducts.add(p);
        }
}

这不起作用。 谢谢你指导我..

3 个答案:

答案 0 :(得分:3)

一般情况下,不保证任何类型的List都只包含唯一元素,但我认为您不必完成创建Iterator的过程。< / p>

仅使用List.contains()就足够了 - 如果列表中不包含该元素,请将其添加,否则抛出异常*。

public void addProduct(Product theProduct) throws ProductAlreadyExistsException {
    if(allProducts.contains(theProduct)) {
        throw new ProductAlreadyExistsException("Not unique!");
    }
    allProducts.add(theProduct);
}

*:抛出异常有点愚蠢的IMO。这应该只保留用于真正特殊的行为。你最好选择某种Set

答案 1 :(得分:3)

在Java中,您使用s1.equals(s2)方法来识别两个字符串是否相等。

 if ( p.getName() == product.getName()) // This will always return false, because references are compared here

你应该做的是:

if ( p.getName().equals(product.getName()) )

注意:我假设getName()返回一个字符串。

答案 2 :(得分:0)

Makoto的回答是一种确保对象在List中唯一的简单方法。

此外,您需要确保在要添加到列表中的对象类中实现equals(Object obj)方法。 List.contains()方法对其包含的每个对象调用equals(yourObject)并返回true,只要equals(yourObject)List中的任何对象返回true,就会返回equals(Object obj)。 / p>

在这里,您可以看到Product课程中可以使用的public class Product { //Other methods here public boolean equals(Object obj) { if(this == obj) return true; if(obj == null) return false; if(this.getClass() != obj.getClass()) return false; Product product = (Product)obj; boolean result = true; //Compare fields of this with fields of product and set result return result; } } 的良好实施。

{{1}}