求大神告诉解决TreeSet 自定义类 比较问题,因为TreeSet要添加自定义类时 需要将这个类实现一个Comparable的接口 或是在创建TreeSet对象的时候 传入一个比较器,但是因为这两个接口要重写的方法的返回值都是int类型的所以小弟疑惑要是比较整数的就可以 ,但是要比较double类型或其它类型 要怎么比较呢,因为我觉得如果把double类型强制转换为int类型的话这样不好求大神给点解题思路

解决方案 »

  1.   

    返回的int型不是这个意思  它只是一个标志 通常大于时返回一个正数,小于时返回一个负数,等于时返回零 这三个数据treeset自己能认识 他就像定的一个标准
      

  2.   

    我是指自定义的比较器 若果你用两个double类型的比较 没有强转 他是会报错的啊
      

  3.   

    我是指自定义的比较器 若果你用两个double类型的比较 没有强转 他是会报错的啊
      

  4.   


    import java.util.TreeSet;//1. 自定义书类,在TreeSet中存储一批书,按照价格顺序输出。
    class Book1 implements Comparable{
    int id;
    String name;
    double price;
    public Book1(int id,String name,double price){
    this.id=id;
    this.name=name;
    this.price=price;
    }
    @Override
    public int compareTo(Object o) {
    if(o instanceof Book1){
    Book1 b=(Book1)o;
    return this.price-b.price;
    }
    return 0;
    }
    @Override
    public String toString() {

    return this.id+"-"+this.name+"-"+this.price;
    }

    }
    public class Test1 {
    public static void main(String[] args) {
    TreeSet set=new TreeSet();
    set.add(new Book1(1,"java思想" , 70 ));
    set.add(new Book1(2,"java核心技术" , 64));
    set.add(new Book1(3,"java基础" , 40));
    set.add(new Book1(4,"深入javaweb" , 34 ));
    set.add(new Book1(5,"web" , 34.1 ));
    System.out.println(set);
    }}这里比较价格是double类型的  怎么比较  
      

  5.   

     public int compareTo(Object o) {    
        if(o instanceof Book1){          
      Book1 b=(Book1)o;  
    if(this.price>b.price){
    return 1;
    }
    if(this.price<b.price){
    return -1;
    }else{
    return 0;
    }             
    }        
      

  6.   

    谢谢啦 ,那如果是比较String类型的呢
      

  7.   

    String 已实现comparable
     public int compareTo(Book1 book) {               
      return this.price.compareTo(book.price);       
    }        上面的代码也有问题,因为你跟object比较是没意义的 public int compareTo(Book1 book) {             
      Book1 b=(Book1)o;  
    if(this.price>b.price){
    return 1;
    }
    if(this.price<b.price){
    return -1;
    }else{
    return 0;         
    }        
      

  8.   

    我是指比较自定义类 里面的一个String 属性
      

  9.   

    累死 我不是比较的price属性么?
      

  10.   

    public int compareTo(Book1 book) {               
      return this.price.compareTo(book.price);       
    }        这个能行吗,price有compareTo()方法吗
      

  11.   

    我是举个例子 如果price是String类型
      

  12.   

    把double类型的数据变成对象,就能使用compareTo方法比较了
    记住一点,只要是对象就能用compareTo方法比较
      

  13.   

    楼主貌似不喜欢动脑子。看了比较float属性的那段代码就该明白的吧。compareTo方法通过返回值的范围(负整数、0、正整数)来确定对象的顺序,所以你无需关心这个方法本身怎么返回,你要用它,就要在它的规则之上再根据你的需求重写之。比较字符串就看你想怎么比较了,你想怎么比较怎么比较,把你的规则当成条件不就完了。@Override
       public int compareTo(Object o) {
          if(o instanceof Book1){
                if(your rules){
                  return 1;
               }if(your rules){
                  return -1;
              }
            }
            return 0;
         }