当我尝试使用可比的界面创建匿名内部时,出现编译错误。
//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);
}
});
答案 0 :(得分:0)
Comparable用于创建可以与自己进行比较的类。
比较器将与未实现Comparable的类一起使用(出于某种原因,例如,来自第三方),或者您要与原始的compareTo()方法进行比较,而不继承它们。
希望对您有意义。
这是一个详尽的例子: https://www.geeksforgeeks.org/comparable-vs-comparator-in-java/
答案 1 :(得分:0)
TreeSet
排序Util类需要Comparator
,因为它有两个可以比较的参数。Comparable
没有足够的信息来比较其他元素。 Q:现在,您将问排序项目实现Comparable
时它如何工作?
A:在这种情况下,排序项目是要与之比较的第一个项目,其他元素则传递给其方法compareTo(String o)
答案 2 :(得分:0)
实际上,我看到TreeSet api之后便意识到了这一点。
上述错误是因为TreeSet不接受Comparable接口作为构造函数参数,它只接受带有实现的Comparator接口。
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)