[英]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.