使用比较器对Java TreeSet进行排序

时间:2018-11-03 23:11:57

标签: java sorting set comparator treeset

我正在尝试使用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)的构造函数。

请问有什么解决方案吗?预先感谢。

2 个答案:

答案 0 :(得分:1)

我根据您提供的信息尝试了一个非常简单的实现,并给出了我的结果:

project structure

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());      
    }

}

执行结果如下:

exec

显然,也没有编译错误。

答案 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";
    }
}