使用可比接口的匿名内部类



当我尝试使用类似的接口创建匿名内部时,出现编译错误。

//Code trying to create treeset using comparable
// compilation error
TreeSet<String> treeSet5 = new TreeSet<String>(new Comparable<String>() {
@Override
public int compareTo(String o) {
// TODO Auto-generated method stub
return 0;
}
});
// CE:The constructor TreeSet<String>(new Comparable<String>(){}) is undefined

我知道对于自定义排序,我们需要使用比较器,但我很好奇为什么我们不能创建可比较的匿名类。

//Custom sorting: default sorting as String implements comparable
// below code is fine as its working as expected.
TreeSet<String> treeSet2 = new TreeSet<String>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
  1. 排序可以通过比较两个实体来完成。
  2. TreeSet这样的排序 Util 类需要Comparator,因为它有两个可以与之比较的参数。
  3. Comparable没有足够的信息来比较其他元素。

:现在你会问当排序项目实现Comparable时它是如何工作的?

答:在这种情况下,排序项目是第一个要比较的项目,其他元素被传递给它的方法compareTo(String o)

可比用于创建可以与自己比较的类。

Comparator 将用于未实现 Comparable 的类(无论出于何种原因,例如来自第三方(,或者您希望将它们与原始 compareTo(( 方法进行比较而不继承它们。

希望这对你有意义。

这是详细的例子: https://www.geeksforgeeks.org/comparable-vs-comparator-in-java/

实际上,当我看到TreeSet api时,我在下面意识到了这一点。

上述错误是因为 TreeSet 不接受 Comparable 接口作为构造函数参数,它只接受带有实现的比较器接口。

Treeset treeSet=new TreeSet();
//Creates empty tree set. All objects are inserted according to natural sorting order.
Treeset treeSet=new TreeSet(Comparator c);
//Creates empty treeSet object, objects are maintained according to defined Comparator.
TreeSet treeSet = new TreeSet(Collection c)

最新更新