Java 集合树的搜索机制

Java 集合树的搜索机制,java,collections,comparable,Java,Collections,Comparable,我已经实现了可比较的测试类,那么为什么会发生上述异常。comparable和comparator接口用于按姓名、职务、工资进行排序。树集合用于添加姓名、职务、薪资 我并没有提到emp类,但在输出中它显示collections.emp不能被强制转换 你没有展示Emp的实现。我假设它没有实现可比性。此外,您使用的是原始类型,这是不推荐的。@Eran thanku。但是我为什么要实现emp?它没有任何用处。我已经实现了测试类。您的第一个树集(TreeSet set=new TreeSet();)将依赖

我已经实现了可比较的测试类,那么为什么会发生上述异常。comparable和comparator接口用于按姓名、职务、工资进行排序。树集合用于添加姓名、职务、薪资

我并没有提到emp类,但在输出中它显示collections.emp不能被强制转换


你没有展示Emp的实现。我假设它没有实现可比性。此外,您使用的是原始类型,这是不推荐的。@Eran thanku。但是我为什么要实现emp?它没有任何用处。我已经实现了测试类。您的第一个树集(
TreeSet set=new TreeSet();
)将依赖于您放入其中的元素来实现Comparable,因为您没有提供比较器。您正在将Emp元素放入该集合中,而不是测试元素,因此Emp必须实现可比较的元素。@Eran我明白了。。非常感谢!!!
> classcast exception is occur in output
Exception in thread "main" java.lang.ClassCastException: collections1.Emp        cannot be cast to java.lang.Comparable
    at java.util.TreeMap.compare(Unknown Source)
    at java.util.TreeMap.put(Unknown Source)
    at java.util.TreeSet.add(Unknown Source)
    at collections1.Empts.main(Empts.java:57) 
  package collections1;
import java.util.*;
class Test implements Comparable
{
    String name,job;
    int salary;
    @Override
    public int compareTo(Object o) {
        Test e=(Test)o;
        return this.name.compareTo(e.name);
    }
    public Test(String n,String j,int s)
    {
           name=n;
           job=j;
            salary=s;
    }
    public void display()
    {
        System.out.println(name+"\t"+job+"\t"+salary);
    }
}


class Jobcomparator implements Comparator
{

    @Override
    public int compare(Object o, Object p) 
    {
        Test e1=(Test)o;
        Test e2=(Test)p;
        return e1.job.compareTo(e2.job);
    }

}

class Salarycomparator implements Comparator
{

    @Override
    public int compare(Object o, Object p) 
    {
        Test e1=(Test)o;
        Test e2=(Test)p;
        return e1.salary-e2.salary;
    }

}
public class Empts
{

    public static void main(String[] args)
    {
    
    TreeSet set=new TreeSet();
    set.add(new Emp("tanya","student",5000));
    set.add(new Emp("saloni","teacher",60000));
    set.add(new Emp("vaishnavi","manager",90000));
    System.out.println("set elements in ascending order of name");
    display(set.iterator());

    TreeSet js=new TreeSet(new Jobcomparator());
    js.addAll(set);
    System.out.println("set elements in ascending order of job");
    display(js.iterator());

    TreeSet s=new TreeSet(new Salarycomparator());
    s.addAll(set);
    System.out.println("set elements in ascending order of salary");
    display(s.iterator());

    }

    private static void display(Iterator itr)
    { 
            while(itr.hasNext())
            {
                Test e=(Test)itr.next();
                e.display();
            }
    } 

}