黑马程序员技术交流社区
标题:
我实现了Comparator接口,为什么会报Comparable接口类转换异常呢
[打印本页]
作者:
hopestar
时间:
2015-6-18 11:31
标题:
我实现了Comparator接口,为什么会报Comparable接口类转换异常呢
看出来问题的大神,请不吝赐教,谢谢!
实现代码如下:
package views;
import java.util.*;
public class Test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<Student> ss=new TreeSet<Student>();
ss.add(new Student(18,"B"));
ss.add(new Student(18,"A"));
ss.add(new Student(19,"a"));
ss.add(new Student(19,"a"));
ss.add(new Student(20,"f"));
ss.add(new Student(20,"a"));
ss.add(new Student(16,"B"));
ss.add(new Student(17,"A"));
Iterator< Student> it=ss.iterator();
Student stu1=null;
while(it.hasNext())
{
stu1=it.next();
System.out.println(stu1.getAge()+"----"+stu1.getName());
}
}
}
class Student implements Comparator<Student> {
private int age=0;
private String name =null;
public Student (int age,String name){
this.age=age;
this.name=name;
}
public int getAge()
{
return age;
}
public String getName()
{
return name;
}
public int compare(Student obj1,Student obj2)
{
if(obj1.getAge()==obj2.getAge())
return obj1.getName().compareTo(obj2.getName()) ;
return obj1.getAge()-obj2.getAge();
}
}
作者:
hopestar
时间:
2015-6-18 12:21
已经解决,修改后代码如下:
package views;
import java.util.*;
public class Test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<Student> ss=new TreeSet<Student>(new comp());
ss.add(new Student(18,"B"));
ss.add(new Student(18,"A"));
ss.add(new Student(19,"a"));
ss.add(new Student(19,"a"));
ss.add(new Student(20,"f"));
ss.add(new Student(20,"a"));
ss.add(new Student(16,"B"));
ss.add(new Student(17,"A"));
Iterator< Student> it=ss.iterator();
Student stu1=null;
while(it.hasNext())
{
stu1=it.next();
System.out.println(stu1.getAge()+"----"+stu1.getName());
}
}
}
class Student {
private int age=0;
private String name =null;
public Student (int age,String name){
this.age=age;
this.name=name;
}
public int getAge()
{
return age;
}
public String getName()
{
return name;
}
}
class comp implements Comparator<Student>{
public int compare(Student obj1,Student obj2)
{
if(obj1.getAge()==obj2.getAge())
{return obj1.getName().compareTo(obj2.getName()) ;
}
return obj1.getAge()-obj2.getAge();
}
}
作者:
改变
时间:
2015-6-18 12:43
额,出现的问题是你实现的是比较器Comparator,这个需要作为形参传递给TreeSet构造器中。在类中的话需要实现Comparable接口并实现compareTo方法即可。
作者:
hopestar
时间:
2015-6-19 15:51
改变 发表于 2015-6-18 12:43
额,出现的问题是你实现的是比较器Comparator,这个需要作为形参传递给TreeSet构造器中。在类中的话需要实 ...
是的,已经解决,小问题一枚,谢谢
作者:
人傻嘴笨脑残
时间:
2015-6-19 16:25
既然解决了,我就那个经验再走吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2