[英]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(){
// ????????????????????????????????????????????????????????????
所以我的問題是
您可以返回bool值以了解產品是否已存在。 如果不添加其他代碼ID,代碼用於確保產品的差異化。 產品實例將只包含一個產品的信息,因此必須在具有產品所有記錄的類的成員函數中進行排序,而不僅僅是一個。 沒有product_database不擴展產品。 它是產品類別的日志而不是其中的一部分。
你的問題1和2有點不清楚。 你能重新寫一下嗎? 至於問題3.沒有ProductDatabase不擴展產品,也不應該擴展產品。 ProductDatabase HAS產品。 ProductDatabase 不是產品
contains()
就足夠了(在我們的例子中)以確保唯一性 equals
和hashCode
- 你很好 sort
,但由於每次調用contains()
時都使用ArrayList,因此迭代整個列表並不是非常有效。 更好的實現將使用Set
(例如HashSet
) ProductDatabase
不必擴展Product
- 它包含一個列表/一組產品,但它沒有像Product
這樣的任何字符/行為 是的,包含(p)足以確保相同的產品不在列表中,因為您覆蓋了“等於”方法。 在“等於”中,您可以使用更短的結構:
Product other = (Product)o; return this.code == other.code;
對於帶有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.