黑马程序员技术交流社区

标题: TreeSet集合按字符串长度排序为什么错了 [打印本页]

作者: 刘海源    时间: 2012-7-29 13:27
标题: TreeSet集合按字符串长度排序为什么错了
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;
        }

}

作者: 肖琦    时间: 2012-7-29 14:00
new TreeSet的时的参数应该是类Comparctor1不是接口Comparctor
作者: 朱烈葵    时间: 2012-7-29 14:01
楼上说的是的
作者: 张桂林    时间: 2012-7-29 14:27
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

作者: 刘奇    时间: 2012-7-29 17:56
TreeSet<Person> t=new TreeSet<Person>(new Comparator());      
这条语句错了,new的是Comparator接口的实现类Comparator1,而不是Comparator
作者: 陆强强    时间: 2012-7-29 19:27
毕老师用的是匿名内部类,可以这样
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 20:05
张桂林 发表于 2012-7-29 14:27
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

这样也有分,我抗议
作者: 柯玲    时间: 2012-7-29 20:32
JDK中是这样描述给TreeSet指定比较器的:
你这里写的是class Comparator1 implements Comparator 当然是传递该接口的子类对象new Comparator1()

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

1.jpg





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2