实现Comparable显示问题

teayear
前端领域优质创作者
博客专家认证
2014-07-31 09:21:51
//模拟商品包含编号、名称、价格、产地、生产日期等详细信息
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]
,为什么不显示元素内容呢?
...全文
206 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
姜小白- 2014-07-31
  • 打赏
  • 举报
回复
3楼正解 楼主实现了Comparable 接口,重写了比较方法 用system 输出set 时,调用的是set 的toString 方法 set 没有重写Object的toString 方法,所以打印的是地址
lliiqiang 2014-07-31
  • 打赏
  • 举报
回复
覆盖toString()方法
huoer_gf 2014-07-31
  • 打赏
  • 举报
回复
3楼说的有道理,如果你想直接输出,就要自己重写toString()方法。
tony4geek 2014-07-31
  • 打赏
  • 举报
回复
上面错了。应该是。 this.price=price; 没加。
tony4geek 2014-07-31
  • 打赏
  • 举报
回复
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; }
zhjdg 2014-07-31
  • 打赏
  • 举报
回复
System.out.println(set); 实际上是 System.out.println(set.toString()); TreeSet 用的是Object 中的toString方法。
tony4geek 2014-07-31
  • 打赏
  • 举报
回复
可以的啊
[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
teayear 2014-07-31
  • 打赏
  • 举报
回复
Iterator it=set.iterator(); while(it.hasNext()){ Product p=(Product)it.next(); System.out.println(p.getName()+"--"+p.getPrice()+"--"+p.getPlace()+"-"+p.getId()); }如果使用迭代,显示的价格是0.0,为什么嗯?

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧