A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马儿不吃草 中级黑马   /  2016-4-8 11:30  /  914 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(1)定义一个TreeSet集合,然后存入6个Double类型的数据,分别是[1.1,5.2,6.3,2.5,5.2,3.3]
(2)不去重,然后遍历输出(从大到小)
public static void main(String[] args) {
                TreeSet<Double> ts = new TreeSet<>(new Comparator<Double>() {

                        @Override
                        public int compare(Double d1, Double d2) {
                                int num = (int)(d2 - d1);
                                return num == 0 ? 1 : num;
                        }
                });
                ts.add(1.1);
                ts.add(5.2);
                ts.add(6.3);
                ts.add(2.5);
                ts.add(5.2);
                ts.add(3.3);
                for (Double d : ts) {
                        System.out.println(d);
                }
        }
}
为什么输出的结果是6.3
5.2
5.2
2.5
3.3
1.1

4 个回复

倒序浏览
public int compare(Double d1, Double d2) {
                                int num = (int)(d2 - d1);
                                return num == 0 ? 1 : num;
                        }
这里应该是:
  int num = (int )(d1 - d2);
return num == 0? 1:num;
如果是从小到大是:d1 - d2
          从大到小是:d2 - d1
回复 使用道具 举报
Hawking 发表于 2016-4-8 12:17
public int compare(Double d1, Double d2) {
                                int num = (int)(d2 - d1); ...

要求的从大到小,我纠结的是,为什么2.5会排在3.3的前面
回复 使用道具 举报
马儿不吃草 发表于 2016-4-8 12:27
要求的从大到小,我纠结的是,为什么2.5会排在3.3的前面

public static void main(String[] args) {
                TreeSet<Double> ts = new TreeSet<>(new Comparator<Double>() {
                                @Override
                                public int compare(Double o1, Double o2) {
                                        // TODO Auto-generated method stub
                                        int i = 1 ;
                                        double d = o2 -o1 ;
                                        if(d>0)
                                                i = 1 ;
                                        if(d<0)
                                                i = -1 ;
                                        return i;
                                }
                        }) ;               
    ts.add(1.1);
    ts.add(5.2);
    ts.add(6.3);
    ts.add(2.5);
    ts.add(5.2);
    ts.add(3.3);
    for (Double d : ts) {
            System.out.println(d);
    }
        }
}
结果:
6.3
5.2
5.2
3.3
2.5
1.1
刚才看错了,,,因为double转换到int 是会丢失数据,,(3.3-2.5=0.8);0.8是double类型换到int时时0;而你给了1;所以3.3会放在2.5的左面,上面是我写的你看看!!

回复 使用道具 举报
Hawking 发表于 2016-4-8 13:01
public static void main(String[] args) {                TreeSet ts = new TreeSet(new Comparator() {                                @Override ...

嗯.好了.没注意这块的问题,感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马