import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
import java.io.IOException;
import java.util.Scanner;public class TestPeople {

public static void main(String[] args) {
          Set set = new TreeSet();
    People s1 = new People("draglong");
    People e2 = new People("jack");
    People e3 = new People("smith");
    set.add(s1);
    set.add(e2);
    set.add(e3);
    Iterator iter = set.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
   }
      }
}public class People {

private String Str;

public People(String str) {
this.Str = str;
}
}   我用Eclipse运行时报错。信息为:
    Exception in thread "main" java.lang.ClassCastException: cn.edu.my.People
at java.util.TreeMap.compare(TreeMap.java:1093)
at java.util.TreeMap.put(TreeMap.java:465)
at java.util.TreeSet.add(TreeSet.java:210)
at cn.edu.my.TestPeople.main(TestPeople.java:42)
   也就是set.add(s1);
    set.add(e2);
    set.add(e3);出错了。请问错在哪儿了,怎么改?如果我要输入姓名,年龄,班级后要排序又该怎么办?是不是要将HashSet中的add()重写阿?

解决方案 »

  1.   

    public class TestPeople {
        
        private String Str;    public static void main(String[] args) {
              Set set = new TreeSet();
            String s1 =  People.People("draglong");
            String e2 =  People.People("jack");
            String e3 =  People.People("smith");
            set.add(s1.toString());
            set.add(e2);
            set.add(e3);
            Iterator iter = set.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
           }
        }
    }
    public  class People {
        
        
        public static String People(String str) {
           
           return str;
        }
    }
      

  2.   

    public class  Test
    {
    public static void main(String[] args) 
    {
    People p=new People("hello",1);
    java.util.Set set=new java.util.TreeSet(p);
    People s1 = new People("draglong",12);
    People e2 = new People("jack",15);
    People e3 = new People("smith",13);
    set.add(s1);
    set.add(e2);
    set.add(e3);
    java.util.Iterator i=set.iterator();
    while(i.hasNext())
    System.out.println(i.next());
    }
    }
    class People implements java.util.Comparator
    {
    private String name;
    private int age;
    public People(String name,int age)
    {
    this.name=name;
    this.age=age;
    }
    public int getAge()
    {
    return this.age;
    }
    public int compare(Object p1,Object p2)
    {
    int age1=((People)p1).getAge();
    int age2=((People)p2).getAge();
    if(age1<age2)
    return -1;
    if(age1==age2)
    return 0;
    else
    return 1;
    }
    public boolean equals(Object p)
    {
    int age=((People)p).getAge();
    if(this.age==age)
    return true;
    else
    return false;
    }
    public String toString()
    {
    return "Name :"+this.name+" ,age :"+this.age;
    }
    }
    在初始化的时候你必须为TreeSet指定一个用于排序的标准,否则,当它第二次添加元素的时候它不知道该不该添加该元素(如果它中已经有了和要添加元素相等的元素,就是两个元素执行equals方法返回真时),如果添加,因为没有衡量标准,它不知道要把元素放到什么位置(因为TreeSet是有序的,也就是它要根据添加元素的比较标准把元素放到适当的位置)
      

  3.   

    set.add(s1);是填充people类型对象,会有判断,比较麻烦,可以去看api。
      

  4.   

    如果你把程序改为下面的:
    public class  Test
    {
    public static void main(String[] args) 
    {
    //People p=new People("hello",1);
    java.util.Set set=new java.util.TreeSet();
    //People s1 = new People("draglong",12);
    //People e2 = new People("jack",15);
    //People e3 = new People("smith",13);
    set.add("a");
    set.add("b");
    set.add("c");
    java.util.Iterator i=set.iterator();
    while(i.hasNext())
    System.out.println(i.next());
    }
    }
    class People implements java.util.Comparator
    {
    private String name;
    private int age;
    public People(String name,int age)
    {
    this.name=name;
    this.age=age;
    }
    public int getAge()
    {
    return this.age;
    }
    public int compare(Object p1,Object p2)
    {
    int age1=((People)p1).getAge();
    int age2=((People)p2).getAge();
    if(age1<age2)
    return -1;
    if(age1==age2)
    return 0;
    else
    return 1;
    }
    public boolean equals(Object p)
    {
    int age=((People)p).getAge();
    if(this.age==age)
    return true;
    else
    return false;
    }
    public String toString()
    {
    return "Name :"+this.name+" ,age :"+this.age;
    }
    }
    这个时候就可以了,因为String类型默认实现java.lang.Comparable接口(相当于程序中的java.util.Comparator),TreeSet就知道比较大小的标准了
      

  5.   

    同意 imA(男的不会,会的不男)
      

  6.   

    也可以用Comparable接口,如下:
    public class  Test
    {
    public static void main(String[] args) 
    {
    java.util.Set set=new java.util.TreeSet();
    People s1 = new People("draglong",12);
    People e2 = new People("jack",15);
    People e3 = new People("smith",13);
    set.add(s1);
    set.add(e2);
    set.add(e3);
    java.util.Iterator i=set.iterator();
    while(i.hasNext())
    System.out.println(i.next());
    }
    }
    class People implements Comparable
    {
    private String name;
    private int age;
    public People(String name,int age)
    {
    this.name=name;
    this.age=age;
    }
    public int getAge()
    {
    return this.age;
    }
    public int compareTo(Object p)
    {
    int age=((People)p).getAge();
    if(this.age<age)
    return -1;
    if(this.age==age)
    return 0;
    else
    return 1;
    }
    public String toString()
    {
    return "Name :"+this.name+" ,age :"+this.age;
    }
    }
      

  7.   

    TestPeople需要继承Comparable,或TreeSet需要加Comparator!
      

  8.   

    楼上整个是一团糟,正确答案应该是 TestPeople需要继承Comparable,或TreeSet需要加Comparator!import java.util.Comparator;
    import java.util.Iterator;
    import java.util.Set;
    import java.util.TreeSet;public   class   PeopleTest   { public   static   void   main(String[]   args)   {

    testComparable();

    testComparator();
    } static void testComparable() { 
        Set   set   =   new   TreeSet(); 
        People   s1   =   new   People( "draglong "); 
        People   e2   =   new   People( "jack "); 
        People   e3   =   new   People( "smith "); 
        set.add(s1); 
        set.add(e2); 
        set.add(e3); 
        Iterator   iter   =   set.iterator(); 
    while(iter.hasNext()){ 
    System.out.println(iter.next()); 
      } 
            }
    static void testComparator() { 
        Set set = new TreeSet(new StaffComparator()); 
        Staff   s1   =   new   Staff( "draglong "); 
        Staff   e2   =   new   Staff( "jack "); 
        Staff   e3   =   new   Staff( "smith "); 
        set.add(s1); 
        set.add(e2); 
        set.add(e3); 
        Iterator   iter   =   set.iterator(); 
    while(iter.hasNext()){ 
    System.out.println(iter.next()); 
      } 
            }

       class People implements Comparable {  private String name; 
    public People(String name) {
    super();
    this.name = name;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public int compareTo(Object p2) {
    String name1 = getName();
    String name2 = ((People) p2).getName();
    return name1.compareTo(name2);
    }
    }       class Staff { private String name; public Staff(String name) {
    super();
    this.name = name;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }
       }
     class StaffComparator implements Comparator {  public int compare(Object p1, Object p2) {
    String name1 = ((Staff) p1).getName();
    String name2 = ((Staff) p2).getName();
    return name1.compareTo(name2);
    } // public boolean equals(Object p) {
    // return getName().equals(p);
    // }
    }