当前位置: 代码迷 >> 综合 >> 用TreeSet集合存储自定义对象,并遍历时,报错:Comparable_Demo.Student cannot be cast to java.lang.Comparable,该怎么办?
  详细解决方案

用TreeSet集合存储自定义对象,并遍历时,报错:Comparable_Demo.Student cannot be cast to java.lang.Comparable,该怎么办?

热度:15   发布时间:2024-02-09 18:39:15.0

在这里插入图片描述

使用TreeSet集合存储学生对象使用无参构造方法时,出现关于Comparable的报错。

package Comparable_Demo;public class Student {private int age;private String name;public Student() {}public Student(int age,String name) {this.name = name;this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Student [age=" + age + ", name=" + name ;}}
package Comparable_Demo;import java.util.TreeSet;//用TreeSet集合存储自定义对象,并遍历
//要求:年龄按从小到大的顺序,名字按字母顺序排序
public class Test {public static void main(String[] args) {// TODO Auto-generated method stub//创建集合对象,使用无参方法TreeSet<Student> ts = new TreeSet<Student>();//创建学生对象Student s = new Student(18,"纤维素");Student s1 = new Student(19,"响尾蛇");Student s2 = new Student(20,"新闻社");//添加元素ts.add(s);ts.add(s1);ts.add(s2);//for增强循环for(Student ss : ts) {System.out.println(ss);}}}

报错:Comparable_Demo.Student cannot be cast to java.lang.Comparable

原因:

  1. 使用TreeSet集合存储自定义对象,无参构造方法是通过自然排序对元素进行排序的。
  2. 自然排序就是让元素所属的类实现Comparable接口,重写compareTo(To)方法

解决办法:

  1. Student类Comparable接口
  2. 重写compareTo(To)方法

最后代码如下:

public class Student implements Comparable<Student>{private int age;private String name;public Student() {}public Student(int age,String name) {this.name = name;this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Student [age=" + age + ", name=" + name ;}@Overridepublic int compareTo(Student s) {// TODO Auto-generated method stubint num = this.age-s.age;//升序int num1 = num == 0 ? this.name.compareTo(s.name):num;return num;}
}
  相关解决方案