TreeSet排序问题
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()重写阿?
[解决办法]
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;
}
}
[解决办法]
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是有序的,也就是它要根据添加元素的比较标准把元素放到适当的位置)