使用compare()方法实现比较器

时间:2014-11-19 18:17:01

标签: sorting customization comparator

这里我的类名是MyComparator2但是我怎么能在这里用它作为方法或对象(我不确定)MyComparator2()在另一个类名ComparaterDemo中来定义自定义排序。任何人都可以帮助明确一个类如何在另一个类上使用吗?提前感谢

import java.util.Comparator;
import java.util.TreeSet;

public class ComparaterDemo {

public static void main(String[] args) {
    TreeSet<Integer> treeSetCOllection = new TreeSet<Integer>(new MyComparator2());
    treeSetCOllection.add(900);
    treeSetCOllection.add(10);
    treeSetCOllection.add(40);
    treeSetCOllection.add(100);
    treeSetCOllection.add(350);
    System.out.println(treeSetCOllection);

}
}

class MyComparator2 implements Comparator{
    public int compare(Object obj1, Object obj2){
        Integer objectNumber1 = (Integer)obj1;
        Integer objectNumber2 = (Integer)obj2;
        if(objectNumber1<objectNumber2) return 1;
        else if (objectNumber1>objectNumber2) return -1;
        else return 0;
    }
}

2 个答案:

答案 0 :(得分:0)

为了使您的类对其他类可见,您需要指定其可见性。 Java中的三种可见性(我假设你正在使用的是):

公开

<强>私有

<强>保护

它们的定义如下:

公开表示该类对所有类都可见,无论文件位于何处。

私有类是类内的类。例如,如果MyComparator2是在ComparaterDemo类中定义的,那么ComparaterDemo可以看到它,但没有其他类可以。

受保护的类的功能与私有类相同,但子类也可以访问它们。因此,如果MyComparator2在ComparaterDemo和SubComparaterDemo子类中定义了ComparaterDemo,则SubComparaterDemo可以访问MyComparator2。在这个例子中,除了ComparaterDemo及其子类之外,没有其他类可以看到它。

在您的问题中,MyComparator2默认设置为受保护。如果你改变了行:&#34;类MyComparator2实现Comparator&#34; to&#34;公共类MyComparator2实现了Comparator&#34;你应该没有更多问题。

我希望这能回答你的问题

答案 1 :(得分:0)

这里发生的事情是您正在使用指定的TreeSet构建Comparator。这是如何工作的,对于使用add()方法添加的每个元素,它将自动对集合进行排序。见here