使用比较器对 Java TreeSet 进行排序
Sort a Java TreeSet using Comparator
我正在尝试使用 Comparator
界面对 TreeSet
个对象 ("Etudiant") 进行排序。这是 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 声明和主要比较器的调用:
TreeSet<Etudiant> University= new TreeSet<Etudiant>(new TriParNom());
当我声明 TreeSet 并调用比较器时,我在主要 class 中遇到的错误是:没有找到适合 TreeSet(TriParNom) 的构造函数。
有什么解决办法吗?提前致谢。
我根据你提供的信息尝试了一个非常简单的实现,我给你我的结果:
学生class是一个非常简单的pojo
public class Etudiant {
private String nom;
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
} }
TriParNom class 是您描述的普通比较器:
import java.util.Comparator;
public class TriParNom implements Comparator<Etudiant> {
@Override
public int compare(Etudiant o1, Etudiant o2) {
return o1.getNom().compareTo(o2.getNom());
}
}
这里是一个简单的class,带有一个入口点和一个示例方法来练习新创建的树集
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());
}
}
执行结果如下:
显然,也没有编译错误。
如果您的代码与下面给出的代码段匹配,那么它应该 运行 没有问题。当您从 class TriParNom
中删除部分 implements Comparator<Etudiant>
时,您将收到错误指示未找到合适的构造函数。现在,如果在对 TriParNom
实施比较器后没有重新编译 classes,则可能会发生另一种愚蠢的方式——但这太明显了。您的 class contins 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";
}
}
我正在尝试使用 Comparator
界面对 TreeSet
个对象 ("Etudiant") 进行排序。这是 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 声明和主要比较器的调用:
TreeSet<Etudiant> University= new TreeSet<Etudiant>(new TriParNom());
当我声明 TreeSet 并调用比较器时,我在主要 class 中遇到的错误是:没有找到适合 TreeSet(TriParNom) 的构造函数。
有什么解决办法吗?提前致谢。
我根据你提供的信息尝试了一个非常简单的实现,我给你我的结果:
学生class是一个非常简单的pojo
public class Etudiant {
private String nom;
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
} }
TriParNom class 是您描述的普通比较器:
import java.util.Comparator;
public class TriParNom implements Comparator<Etudiant> {
@Override
public int compare(Etudiant o1, Etudiant o2) {
return o1.getNom().compareTo(o2.getNom());
}
}
这里是一个简单的class,带有一个入口点和一个示例方法来练习新创建的树集
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());
}
}
执行结果如下:
显然,也没有编译错误。
如果您的代码与下面给出的代码段匹配,那么它应该 运行 没有问题。当您从 class TriParNom
中删除部分 implements Comparator<Etudiant>
时,您将收到错误指示未找到合适的构造函数。现在,如果在对 TriParNom
实施比较器后没有重新编译 classes,则可能会发生另一种愚蠢的方式——但这太明显了。您的 class contins 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";
}
}