簡體   English   中英

關於排序數組列表

[英]About sorting array list

我正在嘗試確保我在productDatabase中插入的對象尚未插入,並且我使用方法sortData對我的arraylist進行排序,但不使用方法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. 包含(p)是否足以確保相同的產品不在列表中?
  2. 當它們具有相同的代碼和名稱時,產品是相同的。如果不是我必須做的事情?
  3. 我如何使用ProductDatabase.maybe類中的比較器通過產品中的新方法對我的toous進行排序?
  4. productDatabase是否擴展了Product ???

您可以返回bool值以了解產品是否已存在。 如果不添加其他代碼ID,代碼用於確保產品的差異化。 產品實例將只包含一個產品的信息,因此必須在具有產品所有記錄的類的成員函數中進行排序,而不僅僅是一個。 沒有product_database不擴展產品。 它是產品類別的日志而不是其中的一部分。

你的問題1和2有點不清楚。 你能重新寫一下嗎? 至於問題3.沒有ProductDatabase不擴展產品,也不應該擴展產品。 ProductDatabase HAS產品。 ProductDatabase 不是產品

  1. 是的, contains()就足夠了(在我們的例子中)以確保唯一性
  2. 既然你實現了equalshashCode - 你很好
  3. 如果沒有其他目的,則無需進行sort ,但由於每次調用contains()時都使用ArrayList,因此迭代整個列表並不是非常有效。 更好的實現將使用Set (例如HashSet
  4. ProductDatabase不必擴展Product - 它包含一個列表/一組產品,但它沒有像Product這樣的任何字符/行為
  1. 是的,包含(p)足以確保相同的產品不在列表中,因為您覆蓋了“等於”方法。 在“等於”中,您可以使用更短的結構:

     Product other = (Product)o; return this.code == other.code; 
  2. 對於帶有java.util.Collections類的sortList,可以選擇兩個選項:

    • Collections.sort(列表列表,比較器c)。 您必須編寫自己的Comparator類並作為第二個參數傳遞。

    • Collections.sort(列表列表)和類Product必須實現Comparable接口

是的,包含(p)足以確保相同的產品不在列表中但是效率不高。 使用Set而不是ArrayList。

對於問題2,您必須決定兩個產品何時相等,並在您的equals方法中編寫代碼,就像您對“產品代碼”所做的那樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM