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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class TreeSet1 {
        public static void main(String[] args) {
                TreeSet<Person> t=new TreeSet<Person>(new Comparator());       
                t.add(new Person("mary",21));
                t.add(new Person("jounp",23));
                t.add(new Person("junpew",21));
                t.add(new Person("helloworld",24));
                Iterator<Person> it=t.iterator();
                while(it.hasNext())
                {
                        System.out.println(it.next().getName().toString());
                }
               
               
            
        }

}
class Person {
        private String name;;
        private int age;
        public Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public String getName() {
                return name;
        }
        public int getAge() {
                return age;
        }

}
class Comparator1 implements Comparator {

        @Override
        public int compare(Object o1, Object o2) {
                Person p1=(Person)o1;
                Person p2=(Person)o2;
                int temp=p1.getName().length()-p2.getName().length();
               
                return temp==0?p1.getName().compareTo(p2.getName()):temp;
        }

}

7 个回复

倒序浏览
new TreeSet的时的参数应该是类Comparctor1不是接口Comparctor
回复 使用道具 举报
楼上说的是的
回复 使用道具 举报
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TreeSet1 {
        public static void main(String[] args) {
                TreeSet<Person> t=new TreeSet<Person>(new Comparator1());      
                t.add(new Person("mary",21));
                t.add(new Person("jounp",23));
                t.add(new Person("junpew",21));
                t.add(new Person("helloworld",24));
                Iterator<Person> it=t.iterator();
                while(it.hasNext())
                {
                        System.out.println(it.next().getName().toString());
                }
               
               
            
        }

}
class Person {
        private String name;;
        private int age;
        public Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public String getName() {
                return name;
        }
        public int getAge() {
                return age;
        }

}
class Comparator1 implements Comparator {

        @Override
        public int compare(Object o1, Object o2) {
                Person p1=(Person)o1;
                Person p2=(Person)o2;
                int temp=p1.getName().length()-p2.getName().length();
               
                return temp==0?p1.getName().compareTo(p2.getName()):temp;
        }

}
修改下红色部分就可以
程序有点乱

%HE[KK(][~0F_2Q9NH_P3TY.jpg (8.33 KB, 下载次数: 81)

%HE[KK(][~0F_2Q9NH_P3TY.jpg
回复 使用道具 举报
TreeSet<Person> t=new TreeSet<Person>(new Comparator());      
这条语句错了,new的是Comparator接口的实现类Comparator1,而不是Comparator
回复 使用道具 举报
毕老师用的是匿名内部类,可以这样
TreeSet<Person> t=new TreeSet<Person>(new Comparator(){
         public int compare(Object o1, Object o2) {
                Person p1=(Person)o1;
                Person p2=(Person)o2;
                int temp=p1.getName().length()-p2.getName().length();
                                               
                return temp==0?p1.getName().compareTo(p2.getName()):temp;
        }
});   
回复 使用道具 举报
张桂林 发表于 2012-7-29 14:27
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

这样也有分,我抗议
回复 使用道具 举报
柯玲 中级黑马 2012-7-29 20:32:50
8#
JDK中是这样描述给TreeSet指定比较器的:
你这里写的是class Comparator1 implements Comparator 当然是传递该接口的子类对象new Comparator1()

1.jpg (11.92 KB, 下载次数: 64)

1.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马