使用比较器对 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";
    }
}