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. 同じ製品がリストに含まれていないことを確認するには、contain(p) で十分ですか?
  2. 製品は、コードと名前が同じであれば同じです。そうでない場合、どうすればよいですか?
  3. クラス ProductDatabase.maybe のコンパレーターを使用せずに、製品の新しいメソッドでソートするにはどうすればよいですか?
  4. productDatabase は Product を拡張しますか?
4

5 に答える 5

2

製品がすでに存在するかどうかを知るために、bool 値を返すことができます。コードは、別のコード ID を追加しない場合、製品の差別化を確実にするために使用されます。Product インスタンスはただ 1 つの Product の情報を運ぶため、Sort は、1 つだけではなく、すべての製品のレコードを持つクラスのメンバー関数で実行する必要があります。product_database は product を拡張しません。一部ではなく製品クラスのログです。

于 2013-11-04T15:26:17.707 に答える
1

あなたの質問1と2は少し不明確です。それらを書き直してもらえますか?質問 3. No ProductDatabase は製品を拡張しません。ProductDatabaseには製品があります。ProductDatabase製品ではありません

于 2013-11-04T15:26:00.387 に答える
0
  1. はい、contains()(私たちの場合)一意性を確保するのに十分です
  2. あなたが実装equalsしたのでhashCode- あなたは良いです
  3. 別の目的がない場合は必要ありませsortんが、呼び出されるたびに ArrayList を使用しているため、contains()リスト全体を反復するため、あまり効率的ではありません。より良い実装では、SetHashSetたとえば)を使用します
  4. ProductDatabase拡張する必要はありませんProduct-製品のリスト/セットが含まれていますが、次のような文字/動作はありませんProduct
于 2013-11-04T15:29:33.657 に答える
0
  1. はい、「equals」メソッドをオーバーライドしたため、同じ製品がまだリストにないことを確認するには、contain(p) で十分です。「等しい」では、より短い構造を使用できます。

    Product other = (Product)o;
    return this.code == other.code;
    
  2. java.util.Collections クラスで ArrayList を並べ替える場合、次の 2 つのオプションが可能です。

    • Collections.sort(リスト リスト、コンパレータ c)。独自の Comparator クラスを作成し、2 番目のパラメーターとして渡す必要があります。

    • Collections.sort(List list) およびクラス Product は Comparable インターフェイスを実装する必要があります

于 2013-11-04T15:35:35.190 に答える
0

はい、Contain(p) は、同じ製品がまだリストに含まれていないことを確認するのに十分ですが、効率的ではありません。ArrayList の代わりに Set を使用します。

質問 2 については、2 つの製品がいつ等しいかを決定し、「製品コード」で行ったように equals メソッドでそれをコーディングする必要があります。

于 2013-11-04T15:35:37.187 に答える