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