Comparable合约指定e.compareTo(null)必须抛出NullPointerException 。 从API : 请注意, null不是任何类的实例,即使e.equals(null)返回false , e.compareTo(null)应抛出NullPointerException 。 另一方面, Comparator API在比较null时没有提到什么需要发生。 考虑下面一个采用Comparable的generics方法的尝试,并返回一个Comparator ,它将null作为最小元素。 static <T extends Comparable<? super T>> Comparator<T> nullComparableComparator() { return new Comparator<T>() { @Override public int compare(T el1, T el2) { return el1 == null ? -1 : el2 == null ? +1 : el1.compareTo(el2); } }; } 这使我们能够做到以下几点: List<Integer> numbers […]
我需要一个比较器作为策略模式的一部分,可以使用对象的自然sorting或一些自定义sorting。 对于自然sorting情况,我写了一个简单的比较器: private static class NaturalComparator<T extends Comparable<? super T>> implements Comparator<T> { @Override public int compare(T o1, T o2) { return o1.compareTo(o2); } } 似乎很简单,但我想知道是否有人知道标准API中的一个。 我看了一下TreeMap,没有这样的类,所以当编写代码的时候,显然的答案是否定的,但也许以后再添加。
我有一个列表,我需要在字段上sorting,比如Score。 没有太多的想法,我写了一个实现比较器的新类,它完成任务并且工作。 现在回顾一下,我想知道是否应该让我的类实现Comparable而不是创build一个实现Comparator的新类。 分数是对象将被sorting的唯一字段。 我做了什么可以接受的做法? 是正确的方法“首先有类实现Comparable(对于自然顺序),如果需要替代字段比较,然后创build一个新的类,实现Comparator”? 如果(2)是真的,那么是否意味着只有在类实现Comparable后才能实现Comparator? (假设我拥有原始类)。
我想比较variables,两个typesT extends Number 。 现在我想知道两个variables中的哪一个大于另一个或相等。 不幸的是,我不知道确切的types,我只知道它将是一个java.lang.Number的子types。 我怎样才能做到这一点? 编辑 :我尝试了另一种解决方法,使用TreeSet实际上与自然sorting(当然,它的工作,除AtomicInteger和AtomicLong除外Number实现Comparable所有子类)。 所以我会失去重复的价值。 当使用List s时, Collection.sort()由于绑定不匹配而不会接受我的列表。 非常不满意。
我有一个Duck对象的集合,我想用多个键对它们进行sorting 。 class Duck { DuckAge age; //implements Comparable DuckWeight weight; //implements Comparable String name; } List<Duck> ducks = Pond.getDucks(); 例如。 我想根据他们的体重来sorting, 其次是他们的年龄 。 如果两只鸭子拥有完全相同的体重和完全相同的年龄,那么让我们用他们的名字作为第三把钥匙来区分它们。 我可能会这样做: Collections.sort(ducks, new Comparator<Duck>(){ @Override public int compare(Duck d1, Duck d2){ int weightCmp = d1.weight.compareTo(d2.weight); if (weightCmp != 0) { return weightCmp; } int ageCmp = d1.age.compareTo(d2.age); if (ageCmp != […]
我不知道如何在我的抽象类中实现一个可比较的接口。 我有我正在使用的以下示例代码试图让我的头: public class Animal{ public String name; public int yearDiscovered; public String population; public Animal(String name, int yearDiscovered, String population){ this.name = name; this.yearDiscovered = yearDiscovered; this.population = population; } public String toString(){ String s = "Animal name: "+ name+"\nYear Discovered: "+yearDiscovered+"\nPopulation: "+population; return s; } } 我有一个testing类,将创buildtypes为动物的对象,但是我想在这个类中有一个可比较的接口,以便发现更高的年份比低。 我不知道如何去做这个。
可能重复: compare()和compareTo()之间的区别 Java:实现Comparable和Comparator有什么区别? Comparable和Comparator的关键区别是什么? 哪种情况下比哪一种更受欢迎? 谢谢 更新 – 与例如良好的链接! http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html
我看到了实现Comparable和Comparator的类 。 这是什么意思? 为什么我会用另一个呢?