当前位置: 代码迷 >> J2SE >> 实现Comparable显示有关问题
  详细解决方案

实现Comparable显示有关问题

热度:78   发布时间:2016-04-23 20:23:38.0
实现Comparable显示问题
//模拟商品包含编号、名称、价格、产地、生产日期等详细信息
import java.util.Date;

public class Product implements Comparable<Product>{
private int id; //商品编号;
private String name; //商品名称;
private double price; //价格
private String place; //商品产地;
private Date date; //生产日期
//无参构造方法
public Product(){super();}
//有参构造方法
public Product(int id,String name,double price,String place,Date date){
super();
this.id=id;
this.name=name;
this.place=place;
this.date=date;
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
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 getPlace(){
return place;
}
public void setPlace(String place){
this.place=place;
}
public Date getDate(){
return date;
}
public void setDate(Date date){
this.date=date;
}
// public int compare(Object obj1,Object obj2){
// Product p1=(Product)obj1;
// Product p2=(Product)obj2;
// if(p1.getName().compareTo(p2.getName())>0)
// return -1;
// if(p1.getName().compareTo(p2.getName())<0)
// return 1;
// return 0;
// }
public int compareTo(Product p){
if(this.getId()>p.getId()){
return -1;
}else if(this.getId()<p.getId()){
return 1;
}else{
return 0;
}
}
}import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;


public class CompareProduct {
public static void main(String[] args) {
//创建Set对象,传入一个参数比较器
Set set=new TreeSet<Product>();
Product water=new Product(1001,"柯蓝村井水",1.5,"郑州",new Date());
Product cocacola=new Product(1002,"可口可乐",2.5,"郑州太古可乐",new Date());
Product book=new Product(1003,"货币战争",66,"北京大兴中信出版社",new Date());
Product pen=new Product(1004,"钢笔",100,"上海",new Date());
set.add(water);
set.add(pen);
set.add(book);
set.add(cocacola);
System.out.println(set);
//使用迭代输出集合对象;
// Iterator it=set.iterator();
// while(it.hasNext()){
// Product p=(Product)it.next();
// System.out.println(p.getName()+"--"+p.getPrice());
// }
}
}
,显示[Product@e53108, Product@f62373, Product@19189e1, Product@1f33675]
,为什么不显示元素内容呢?

------解决方案--------------------
可以的啊
[com.test.demo.M812.Product@de6ced, com.test.demo.M812.Product@c17164, com.test.demo.M812.Product@1fb8ee3, com.test.demo.M812.Product@61de33]
钢笔--0.0
货币战争--0.0
可口可乐--0.0
柯蓝村井水--0.0

------解决方案--------------------
System.out.println(set); 实际上是
 System.out.println(set.toString());

TreeSet  用的是Object 中的toString方法。
------解决方案--------------------
public Product(int id,String name,double price,String place,Date date){
        super();
        this.id=id;
        this.name=name;
        this.place=place;
        this.price=price;
        this.date=date;
    }
------解决方案--------------------
上面错了。应该是。  this.price=price; 没加。
------解决方案--------------------
3楼说的有道理,如果你想直接输出,就要自己重写toString()方法。
------解决方案--------------------
覆盖toString()方法
------解决方案--------------------
3楼正解 
楼主实现了Comparable 接口,重写了比较方法
用system 输出set 时,调用的是set 的toString 方法
set 没有重写Object的toString 方法,所以打印的是地址
  相关解决方案