我正在尝试确保我在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(){
// ????????????????????????????????????????????????????????????
所以我的问题是
答案 0 :(得分:2)
您可以返回bool值以了解产品是否已存在。如果不添加其他代码ID,代码用于确保产品的差异化。 产品实例将只包含一个产品的信息,因此必须在具有产品所有记录的类的成员函数中进行排序,而不仅仅是一个。 没有product_database不扩展产品。它是产品类别的日志而不是其中的一部分。
答案 1 :(得分:1)
你的问题1和2有点不清楚。你能重新写一下吗?至于问题3.没有ProductDatabase不扩展产品,也不应该扩展产品。 ProductDatabase HAS 产品。 ProductDatabase 不是产品
答案 2 :(得分:0)
contains()
就足够了(在我们的例子中)以确保唯一性equals
和hashCode
- 您很好sort
,但由于每次调用contains()
时都使用ArrayList,它会迭代整个列表,即不是很有效率。更好的实施方式是使用Set
(例如HashSet
)ProductDatabase
不必扩展Product
- 它包含一个列表/一组产品,但它没有任何字符/行为,例如Product
答案 3 :(得分:0)
是的,包含(p)足以确保相同的产品不在列表中,因为您覆盖了“等于”方法。 在“等于”中,您可以使用更短的构造:
Product other = (Product)o;
return this.code == other.code;
对于带有java.util.Collections的排序ArrayList,可以选择两个选项:
Collections.sort(列表列表,比较器c)。你必须编写自己的Comparator类并作为第二个参数传递。
Collections.sort(列表列表)和类Product必须实现Comparable接口
答案 4 :(得分:0)
是的,包含(p)足以确保相同的产品不在列表中但是效率不高。使用Set而不是ArrayList。
对于问题2,你必须决定两个产品相等的时间,并在你的equals方法中编码,就像你为'产品代码'所做的那样