1

我试图确保我在 productDatabase 中插入的对象尚未插入,并且我使用方法 sortData 对我的数组列表进行排序,但没有在方法 sortData 中使用任何比较器

public class Application {

public static void main(String[] args) {

    Product  p = new Product(15,"test",3.45);
    Product  p2 = new Product(15,"test",3.45);
    Product  p3 = new Product(4716,"koukouroukou",1.25);
    Product  p4 = new Product(6002,"bananofatsoula",0.60);

    ProductDatabase productDatabase = new ProductDatabase();

    productDatabase.addProduct(p);
    productDatabase.addProduct(p2);
    productDatabase.addProduct(p3);
    productDatabase.addProduct(p4);

    productDatabase.printDatabase();

    productDatabase.sortDatabase();
    productDatabase.printDatabase();

}
public class Product {

    private int code;
    private String name;
    private double price;

    public Product(int code, String name, double price){
        this.code = code;
        this.name = name;
        this.price = price;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String toString(){
        return code+" , description: "+name+", price: "+price;
    }

    public int hashCode(){
        return 31 * code + name.hashCode();
    }

    public boolean equals(Object o){
        Product other = (Product)o;
    if (this.code == other.code){
        return true;
    }
    else{ 
        return false;
    }
}
import java.util.ArrayList;

import java.util.Collection;


public class ProductDatabase {

private ArrayList<Product> productDatabase;

public ProductDatabase(){
    productDatabase = new ArrayList<Product>();
}

public void addProduct(Product p){
    if(!productDatabase.contains(p)){
        productDatabase.add(p);
    }
}

public void printDatabase(){
    for(Product product : productDatabase){
        System.out.println(product);
    }
}

public void sortDatabase(){

// ????????????????????????????????????????????????????????????

所以我的问题是

  1. contains(p) 是否足以确保相同的产品不在列表中?
  2. 当它们具有相同的代码和名称时,产品是相同的。如果不是我必须做什么?
  3. 我如何使用 ProductDatabase.maybe 类中的比较器通过产品中的新方法对我的无用进行排序?
  4. productDatabase 是否扩展了 Product???
4

5 回答 5

2

您可以返回 bool 值以了解产品是否已经存在。如果不添加另一个code id,则使用code 来确保产品的差异化。产品实例将只携带一个产品的信息,因此必须在具有所有产品记录的类的成员函数中进行排序,而不仅仅是一个。没有 product_database 不会扩展 product 。它是产品类的日志,而不是一部分。

于 2013-11-04T15:26:17.707 回答
1

你的问题1和2有点不清楚。你能重写它们吗?至于问题 3。没有 ProductDatabase 不扩展产品,也不应该。ProductDatabase产品。ProductDatabase不是产品

于 2013-11-04T15:26:00.387 回答
0
  1. 是的,contain(p) 足以确保相同的产品不在列表中,因为您覆盖了“equals”方法。在“等于”中,您可以使用较短的构造:

    Product other = (Product)o;
    return this.code == other.code;
    
  2. 对于使用 java.util.Collections 类对 ArrayList 进行排序,可能有两个选项:

    • Collections.sort(列表列表,比较器 c)。您必须编写自己的 Comparator 类并作为第二个参数传递。

    • Collections.sort(List list) 和类 Product 必须实现 Comparable 接口

于 2013-11-04T15:35:35.190 回答
0

是的,Contain(p) 足以确保相同的产品不在列表中但效率不高。使用 Set 而不是 ArrayList。

对于问题 2,您必须确定两个产品何时相等,并在您的 equals 方法中编码,就像您为“产品代码”所做的那样

于 2013-11-04T15:35:37.187 回答
0
  1. 是的,contains()(在我们的例子中)足以确保唯一性
  2. 既然你实施equalshashCode- 你很好
  3. sort如果您没有其他目的,则不需要这样做,但是由于您每次都使用 ArrayList被contains()调用,因此它会迭代整个列表,这不是很有效。更好的实现将使用SetHashSet例如)
  4. ProductDatabase不必扩展Product- 它包含一个产品列表/集合,但它没有任何类似的字符/行为Product
于 2013-11-04T15:29:33.657 回答