在下面的代码中,我试图添加两个员工对象
Set<Employee> s = new TreeSet<Employee>(); s.add(new Employee(1001)); s.add(new Employee(1002));
但结果是java.lang.ClassCastException:
Exception in thread "main" java.lang.ClassCastException: Employee cannot be cast to java.lang.Comparable at java.util.TreeMap.put(TreeMap.java:542) at java.util.TreeSet.add(TreeSet.java:238) at MyClient.main(MyClient.java:9)
但是如果我改变了
Set<Employee> s = new TreeSet<Employee>(); s.add(new Employee(1001));
要么
Set<Employee> s = new HashSet<Employee>(); s.add(new Employee(1001)); s.add(new Employee(1002));
解决方法
员工必须实施
Comparable
,或者在创建
TreeSet
时需要
provide a comparator.
在SortedSet
的文档中详细说明了这一点:
All elements inserted into a sorted set must implement the @H_301_26@Comparable interface (or be accepted by the specified comparator). Furthermore,all such elements must be mutually comparable: @H_301_26@e1.compareTo(e2) (or @H_301_26@comparator.compare(e1,e2)) must not throw a @H_301_26@ClassCastException for any elements @H_301_26@e1 and @H_301_26@e2 in the sorted set. Attempts to violate this restriction will cause the offending method or constructor invocation to throw a @H_301_26@ClassCastException.
如果您不符合这些要求,排序集将不知道如何比较其元素,并且无法正常工作.