List
TreeSet<MyClass> myclassSet = new TreeSet<MyClass>(myclassList);
我不明白为什么这段代码会产生这个:
java.lang.ClassCastException: MyClass cannot be cast to java.lang.Comparable
MyClass没有实现Comparable。我只想使用Set来过滤List的唯一元素,因为我的List包含不必要的重复项。
是否MyClass implements Comparable<MyClass>
或类似的东西?
如果没有,那就是为什么。
为此TreeSet
,您必须制作元素Comparable
或提供一个Comparator
。否则TreeSet
将无法运行,因为它将不知道如何对元素进行排序。
请记住,,TreeMap implements SortedSet
因此它必须知道如何以一种或另一种方式对元素进行排序。
您应该熟悉实现如何为给定类型的对象Comparable
定义 自然顺序 的知识。
接口定义一个方法,compareTo
如果该对象分别小于,等于或大于另一个对象,则该方法必须返回负整数,零或正整数。
合同 要求 :
sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
x.compareTo(y)>0 && y.compareTo(z)>0
隐含x.compareTo(z)>0
x.compareTo(y)==0
意味着sgn(x.compareTo(z)) == sgn(y.compareTo(z))
对于所有人z
此外,它 建议 :
(x.compareTo(y)==0) == (x.equals(y))
,即“与 equals
乍一看似乎需要消化很多,但是对于定义总排序的方式确实很自然。
如果您的对象不能以一种或另一种方式进行排序,则TreeSet
没有意义。您可能要使用HashSet
具有自己的合同的a。您可能会被要求@Override hashCode()
并且equals(Object)
适合您的类型(请参阅:Java中的覆盖equals和hashCode)
问题内容: 我有一个包含> 100k对象的TreeSet。我有另一种方法需要ArrayList作为参数。 我有什么方法可以完成此任务而无需迭代整个TreeSet,然后将每个对象手动添加到ArrayList? 问题答案: 这个怎么样: 对于Java 7及更高版本,这可以简化,因为类型参数可以替换为菱形类型:
我试图通过将对象传递给“验证器”来验证库中的结果,其中验证器验证结果是否为空,并随后将传递的对象返回给调用方。例如: 调用方将调用以下内容: 我知道参数绑定发生在运行时,这就是编译器抛出这个错误的原因。我正试图避免使用显式类型创建多个方法,而宁愿捕获实现的所有类型。 在不上传或创建多个显式类型重载方法的情况下,有没有其他方法可以做到这一点?
问题内容: 原始列表将转换为正常。为什么原始列表的列表不能转换为的列表? 背景故事 (以减轻xy问题): 我正在使用return的API 。我碰巧知道它一直都是。我计划循环并构建自己的循环,但是我在尝试编写时试图修复(但不禁止)原始类型编译器警告。 我试过了: 但是这些会导致类型不匹配错误。 有趣的是,这没有给出警告或错误: 问题答案: // #1 (does compile) List raw
问题内容: 我试图将字符串列表从我的Java控制器传递到scala模板。 这是视图代码: 这是临时代码: 我遇到的错误(在Typesafe Activation Compile页面中): 类索引中的render方法不能应用于给定的类型; 必需:scala.collection.immutable.List 找到:java.util.List 原因:实际参数java.util.List无法通过方法调
问题内容: 为什么写: 问题答案: 实现的对象是。 您要在其中覆盖的方法应将对象作为参数,而将其强制转换为。您的实现应描述如何与另一个进行比较。 要真正进行排序,您可能还需要制作工具,然后将实际逻辑复制粘贴到其中。
本文向大家介绍在Java中将HashSet转换为TreeSet,包括了在Java中将HashSet转换为TreeSet的使用技巧和注意事项,需要的朋友参考一下 首先,创建一个具有字符串值的HashSet- 现在,将HashSet转换为TreeSet- 示例 以下是在Java中将HashSet转换为TreeSet的程序- 输出结果