我正在尝试使用TreeSet
接口对Comparator
个对象(“学徒”)进行排序。此Comparator
实现:
import java.util.Comparator;
public class TriParNom implements Comparator<Etudiant>{
public int compare(Etudiant o1, Etudiant o2) {
return o1.getNom().compareTo(o2.getNom());
}
}
这是TreeSet声明和main中的比较器调用:
TreeSet<Etudiant> University= new TreeSet<Etudiant>(new TriParNom());
当我声明TreeSet并调用比较器时,我在主类中遇到的错误是:没有找到适合TreeSet(TriParNom)的构造函数。
请问有什么解决方案吗?预先感谢。
答案 0 :(得分:1)
我根据您提供的信息尝试了一个非常简单的实现,并给出了我的结果:
Etudiant类是一个非常简单的pojo
public class Etudiant {
private String nom;
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
} }
TriParNom类是您描述的普通比较器:
import java.util.Comparator;
public class TriParNom implements Comparator<Etudiant> {
@Override
public int compare(Etudiant o1, Etudiant o2) {
return o1.getNom().compareTo(o2.getNom());
}
}
这是一个简单的类,具有一个入口点和一个示例方法,用于练习新创建的树集
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<Etudiant> u = new TreeSet<>(new TriParNom());
System.out.printf("size? %d%n", u.size());
}
}
执行结果如下:
显然,也没有编译错误。
答案 1 :(得分:0)
如果您的代码与下面给出的代码段匹配,那么它应该可以正常运行而不会出现问题。从implements Comparator<Etudiant>
中删除部分class TriParNom
的那一刻,您将得到指示未找到合适的构造函数的错误。现在,如果在实现TriParNom
的比较器之后没有重新编译类,则可能会发生另一种愚蠢的情况-太明显了。是否将延续main
方法(声明Treeset)的类导入java.util.TreeSet
?
import java.util.Comparator;
import java.util.TreeSet;
public class TreesetCheck {
public static void main(String[] args) {
TreeSet<Etudiant> University= new TreeSet<Etudiant>(new TriParNom());
}
}
class TriParNom implements Comparator<Etudiant>{
public int compare(Etudiant o1, Etudiant o2) {
return o1.getNom().compareTo(o2.getNom());
}
}
class Etudiant {
public String getNom() {
// TODO Auto-generated method stub
return "some";
}
}