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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package shopping.cart;
import java.util.*;
public class Demo3 {
        public static void main(String[] args) {

                int[] arr = {4,2,4,6,1,2,4,7,8,2,4,4,2};
                TreeSet<Integer> ts = new TreeSet<Integer>(new com());
                for(int i = 0; i < arr.length; i ++)
                        ts.add(new Integer(arr[i]));
                Iterator<Integer> it = ts.iterator();
                while(it.hasNext())
                {
                        System.out.print(it.next());
                }
        }
}
class com implements Comparator
{
        public int compare(Object o1, Object o2) {
                Integer i1 = (Integer)o1;
                Integer i2 = (Integer)o2;
                if(i1.equals(i2)){
                        System.out.print((i1)+"::"+(i2)+"   ");
                        return 0;
                }
                return 1;
        }
}

结果:4::4   4::4   2::2   2::2   4::4   426147842

7 个回复

倒序浏览
TreeSet两种方法你搞混了
comparator是比较器,但是如果你用compareTo方法,实现的是comparable接口.你用的方法跟接口都不对
回复 使用道具 举报
人在旅途~东营 发表于 2015-6-7 00:18
TreeSet两种方法你搞混了
comparator是比较器,但是如果你用compareTo方法,实现的是comparable接口.你用的方 ...

你好,他用的是compare()方法,没有搞混。而是他的返回值有误,没有返回负数》
回复 使用道具 举报
亲,你的代码只需要这样就OK了
回复 使用道具 举报
亲,你的代码只需这样就OK了       
public static void main(String[] args) {
                 int[] arr = {4,2,4,6,1,2,4,7,8,2,4,4,2};
         TreeSet<Integer> ts = new TreeSet<Integer>(new Comparator() {

                        public int compare(Object o1, Object o2) {
                                Integer in1 = (Integer)o1;
                                Integer in2 = (Integer)o2;
                                return in1.compareTo(in2);
                        }
         });
                        for(int i:arr) {
                                ts.add(i);
                        }
                        System.out.println(ts);
}
回复 使用道具 举报
你的代码就没进行比较
回复 使用道具 举报
君子无醉 来自手机 中级黑马 2015-6-7 03:34:00
7#
比较器中最好别乱用输出语句,只是返回值就好了。。。比较器,顾名思义 ,就是对集合中的数据比较排序,其实你的arr数组中的都是int类型,完全可以自然排序,或者用Arrays这个类中的快速排序方法sort(),如果非要用比较器的话,需要了解下比较器的原理,它是根据返回的数字大小来排序的(比如返回1,2,3这些数值),底层是二叉树结构,根据返回的数字大小来存放在二叉树当中,而你不是返回0就是返回1,完全没有意义。如果返回0,说明元素重复,不会进来,这就是它的排序原理。
回复 使用道具 举报
君子无醉 来自手机 中级黑马 2015-6-7 03:43:04
8#
能直接写成public int conpare(Integer i1,Integer i2)吧,因为已经定义了泛型,就不需要强制转换了吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马