我有一个需要在字段上排序的对象列表,比如分数。没有多想,我写了一个实现Comparator的新类,它完成了任务并且它工作。现在回头看,我想知道是否应该让我的类实现Comparable,而不是创建一个实现Comparator的新类。分数是对象将被排序的唯一字段。我做了什么可以接受的做法?正确的做法是“首先让类实现Comparable(用于自然排序),如果需要替代字段比较,则创建一个实现Comparator的新类”?如果上面的(2)是正确的,那么是否意味着只有在类实现Comparable之后才应该实现Comparator?(假设我拥有原始类(class))。 最
我有一个需要在字段上排序的对象列表,比如分数。没有多想,我写了一个实现Comparator的新类,它完成了任务并且它工作。现在回头看,我想知道是否应该让我的类实现Comparable,而不是创建一个实现Comparator的新类。分数是对象将被排序的唯一字段。我做了什么可以接受的做法?正确的做法是“首先让类实现Comparable(用于自然排序),如果需要替代字段比较,则创建一个实现Comparator的新类”?如果上面的(2)是正确的,那么是否意味着只有在类实现Comparable之后才应该实现Comparator?(假设我拥有原始类(class))。 最
我见过同时实现Comparable和Comparator的类。这是什么意思?为什么我要使用一个而不是另一个? 最佳答案 以下文字来自ComparatorvsComparable可比一个可比较的对象能够将自己与另一个对象进行比较。类本身必须实现java.lang.Comparable接口(interface)才能比较其实例。比较器比较器对象能够比较两个不同的对象。该类不比较它的实例,而是比较其他类的实例。此比较器类必须实现java.util.Comparator接口(interface)。
我见过同时实现Comparable和Comparator的类。这是什么意思?为什么我要使用一个而不是另一个? 最佳答案 以下文字来自ComparatorvsComparable可比一个可比较的对象能够将自己与另一个对象进行比较。类本身必须实现java.lang.Comparable接口(interface)才能比较其实例。比较器比较器对象能够比较两个不同的对象。该类不比较它的实例,而是比较其他类的实例。此比较器类必须实现java.util.Comparator接口(interface)。
谁能简单解释一下,为什么这段代码会抛出异常,“比较方法违反了它的一般约定!”,我该如何解决?privateintcompareParents(Foos1,Foos2){if(s1.getParent()==s2)return-1;if(s2.getParent()==s1)return1;return0;} 最佳答案 您的比较器不具有传递性。令A为B的父级,B为C的父级。既然A>B和B>C,那么一定是A>C。但是,如果在A和C上调用比较器,它将返回零,即A==C。这违反了契约(Contract),因此引发了异常。图书馆很高兴能检测到
谁能简单解释一下,为什么这段代码会抛出异常,“比较方法违反了它的一般约定!”,我该如何解决?privateintcompareParents(Foos1,Foos2){if(s1.getParent()==s2)return-1;if(s2.getParent()==s1)return1;return0;} 最佳答案 您的比较器不具有传递性。令A为B的父级,B为C的父级。既然A>B和B>C,那么一定是A>C。但是,如果在A和C上调用比较器,它将返回零,即A==C。这违反了契约(Contract),因此引发了异常。图书馆很高兴能检测到
目录 一、基本类型的比较二、对象类型的比较(1)对象类型比较出现的问题(2)重写基类equals方法(3)基于Comparable接口的比较1.实现Comparable接口,重写compareTo方法(4)基于Comparator比较器的比较1.用户自定义比较器类,实现Comparator接口2.覆写Comparator中的compare方法(5)三种比较方式对比三、PriorityQueue的比较方式 一、基本类型的比较在Java中,基本类型的对象可以直接比较大小。基本类型byte、short、int、long、float、double、boolean、charpublicclassTest
目录 一、基本类型的比较二、对象类型的比较(1)对象类型比较出现的问题(2)重写基类equals方法(3)基于Comparable接口的比较1.实现Comparable接口,重写compareTo方法(4)基于Comparator比较器的比较1.用户自定义比较器类,实现Comparator接口2.覆写Comparator中的compare方法(5)三种比较方式对比三、PriorityQueue的比较方式 一、基本类型的比较在Java中,基本类型的对象可以直接比较大小。基本类型byte、short、int、long、float、double、boolean、charpublicclassTest
1.Comparator位于包java.util下,而Comparable位于包java.lang下2.Comparable接口将比较代码嵌入自身类中,而Comparator在一个独立的类中实现比较。3.Comparator接口的比较方法compare(A,B)有两个参数,Comparable的比较方法compareTo(A)只有1个参数a.compareTo(obj):如果a大于形参对象obj,则返回1;compare(Objecto1,Objecto2):如果o1大于o2,返回正整数两个方法都是左边大于右边返回正数,默认从小到大排列//定制排序的用法,此时从大到小排列Collections
1.Comparator位于包java.util下,而Comparable位于包java.lang下2.Comparable接口将比较代码嵌入自身类中,而Comparator在一个独立的类中实现比较。3.Comparator接口的比较方法compare(A,B)有两个参数,Comparable的比较方法compareTo(A)只有1个参数a.compareTo(obj):如果a大于形参对象obj,则返回1;compare(Objecto1,Objecto2):如果o1大于o2,返回正整数两个方法都是左边大于右边返回正数,默认从小到大排列//定制排序的用法,此时从大到小排列Collections