使用"布尔等于()"比较保存在ArrayList中的对象

时间:2017-11-04 13:13:48

标签: java arraylist boolean equals

Class名为Products。此课程有nameprice。 我可以通过以下方式创建产品:

Product book = new Product();
book.setName("book");
book.setPrice(3);

之后,我应该检查ArrayList我是否已经存在此产品,我应该保存它,如果它没有,那么我就把它放在那里。我应该使用以下方法执行此操作:

public boolean equals(Object obj){

}

问题是,我应该怎么做,如果ArrayList我应该保存产品,是在public static void main创建并初始化{{1}在boolean甚至存在之前创建?

我应该将ArrayList本身设为Class,就像这样吗?

ArrayList

4 个答案:

答案 0 :(得分:3)

不要担心它的存在。由于您在Product类中覆盖了equals方法,因此您可以尝试在下面执行此操作

if(yourArayList.contains(book)){
   // it existed in the list
 }else{
   yourArayList.add(book);
}

当你调用contains方法时,它在内部调用Product方法的equals方法与传递给它的对象。

答案 1 :(得分:1)

  

boolean是在ArrayList存在之前创建的吗?

你误解了equals的工作方式。在用某个对象作为参数调用它之前,它不会“创建”boolean,并且它会根据您传递的对象的属性返回boolean

当您定义equals方法时,您提供了用于确定相等性的代码,但是您当时没有做出任何决定:

@Override
public boolean equals(Object obj){
    if (obj == this) return true
    if (!(obj instanceof Product)) return false;
    Product other = (Product)obj;
    if (!other.getName().equals(getName())) return false;
    if (!other.getPrice() == getPrice()) return false;
    return true;
}
@Override
public int hashCode() {
    return 31*getName().hashCode() + getPrice();
}

现在,如果列表中有equals以下两种方式之一,您可以使用Product自杀:

  • 使用contains - 此方法调用equals来检查包含,或
  • 迭代所有对象,并手动调用equals

答案 2 :(得分:1)

您不需要创建自己的ArrayList类。 如果你实现了等于正确的,那么当你执行myList.contains(book)

时,将调用它来检查你是否在列表中有它

实际上有一种结构可以让您跳过在代码中执行检查。您可以使用java.util.HashSet。它确保不能添加重复项。此外,它返回布尔值,说明是否添加了元素。 E.g。

Set<Product> mySet = new HashSet<>(); 
boolean added = mySet.add(book);

请不要忘记易于遵循的规则 - 在定义equals时,也要定义hashCode。如果使用IDE,则可以轻松生成它们。

答案 3 :(得分:1)

在ArrayList存在之前不会创建此布尔值。

您需要覆盖Product的equals()方法,如下所示:

@Override
public boolean equals(Object obj) {
    if(obj == this) return true; // Both objects have the same reference -> the objects are equal
    if((obj == null) || (obj.getClass() != this.getClass())) return false; // Classes are different -> objects are different
    Product p = (Product) obj; // Cast obj into Product
    if( (this.getPrice() == p.getPrice()) && (this.getName().equals(p.getName())) ) return true; // Price and name are the same -> both products are the same
    return false; // At this point the two objects can't be equal
}

这是创建ArrayList的方法:

ArrayList<Product> products = new ArrayList<Product>();

这就是当产品在列表中不存在时添加产品的方式:

    if(!products.contains(yourProduct)){ // Checks if yourProduct is not contained in products
        products.add(yourProduct); // adds yourProduct to products
    }