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()重写阿?
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()重写阿?
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 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是有序的,也就是它要根据添加元素的比较标准把元素放到适当的位置)
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就知道比较大小的标准了
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;
}
}
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);
// }
}