Rai*_*lam 17 java collections exception set treeset
我试图将两个'Employee'对象添加到TreeSet:
Set<Employee> s = new TreeSet<Employee>();
s.add(new Employee(1001));
s.add(new Employee(1002));
Run Code Online (Sandbox Code Playgroud)
但它会抛出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)
Run Code Online (Sandbox Code Playgroud)
但是,如果我只向TreeSet添加一个对象:
Set<Employee> s = new TreeSet<Employee>();
s.add(new Employee(1001));
Run Code Online (Sandbox Code Playgroud)
或者,如果我使用HashSet:
Set<Employee> s = new HashSet<Employee>();
s.add(new Employee(1001));
s.add(new Employee(1002));
Run Code Online (Sandbox Code Playgroud)
然后它成功了.为什么会发生异常,我该如何解决?
NPE*_*NPE 23
要么Employee必须实现Comparable,要么在创建时需要提供比较器TreeSet.
这在以下文档中详细说明SortedSet:
插入到有序集中的所有元素必须实现
Comparable接口(或由指定的比较器接受).此外,所有这些元素必须是可相互比较的:(e1.compareTo(e2)或comparator.compare(e1, e2))不得ClassCastException为任何元素e1和e2有序集合抛出.试图违反此限制将导致违规方法或构造函数调用抛出ClassCastException.
如果您不满足这些要求,则排序集将不知道如何比较其元素并且将无法运行.
| 归档时间: |
|
| 查看次数: |
28961 次 |
| 最近记录: |