显然,它没有记录,或者我错过了它.
这是文档的链接,下面是文本作为图像:
编辑(17/5):我认为太多人把这个问题混淆为比较问题.它不是.比较器比较2个元素.根据那个比较,列表排序.怎么样?升序还是降序?
我将进一步细化/简化问题:如果比较器确定元素A小于元素B. 在排序列表中,元素A是否位于比元素B更低的索引处?

我写了以下代码:
public class NewClass2 implements Comparator<Point>
{
public int compare(Point p1, Point p2)
{
return (int)(p1.getY() - p2.getY());
}
}
Run Code Online (Sandbox Code Playgroud)
如果我说有两个双号,3.2 - 3.1差异应该是0.1.然而,当我将数字转换为int时,差异最终为0,这是不正确的.
因此我需要compare()返回一个double,而不是int.问题是,我的getX领域是双重的.我怎么解决这个问题?
Comparable合同规定e.compareTo(null)必须抛出NullPointerException.
来自API:
请注意,这
null不是任何类的实例,并且e.compareTo(null)应该抛出一个NullPointerException偶数e.equals(null)返回false.
另一方面,ComparatorAPI没有提及比较时需要发生的事情null.考虑以下尝试采用a的泛型方法Comparable,并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);
}
};
}
Run Code Online (Sandbox Code Playgroud)
这允许我们执行以下操作:
List<Integer> numbers = new ArrayList<Integer>(
Arrays.asList(3, 2, 1, null, …Run Code Online (Sandbox Code Playgroud) 我试图在java中学习比较器,我在网上找到了这个很好的例子,我的问题是如何更改这些代码,以便按年龄和降序排列宠物名称,以便最老的是第一个,最小的是最后一个?
class Dog implements Comparator<Dog>, Comparable<Dog>{
private String name;
private int age;
Dog(){
}
Dog(String n, int a){
name = n;
age = a;
}
public String getDogName(){
return name;
}
public int getDogAge(){
return age;
}
// Overriding the compareTo method
public int compareTo(Dog d){
return (this.name).compareTo(d.name);
}
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1){
return d.age - d1.age;
}
}
public class Example{
public static void main(String args[]){
// Takes …Run Code Online (Sandbox Code Playgroud) 我想通过String.CompareTo比较器对一个静态字符串数组进行排序和二进制搜索.
问题是排序和二进制搜索都要求传入Comparator对象 - 那么如何传入内置字符串比较器?
说,我们有以下二维数组:
int camels[][] = new int[n][2];
Run Code Online (Sandbox Code Playgroud)
应该如何Comparator声明Java 类,使用降序排列第一个元素的数组Arrays.sort(camels, comparator)?在compare供参考的功能是:
@Override public int compare(int[] a, int [] b)
{
return b[0] - a[0];
}
Run Code Online (Sandbox Code Playgroud) 类A具有以下比较器:
class A
attr_accessor x
def my_comparator(a)
x**2 <=> (a.x)**2
end
end
Run Code Online (Sandbox Code Playgroud)
我想使用这个比较器对每个项目属于A类的数组进行排序:
class B
def my_method
items.sort!(<how can I pass my_comparator here ?>)
end
end
Run Code Online (Sandbox Code Playgroud)
我应该怎样my_comparator转到sort!?
Comparator接口有自己的equals()方法.equals()默认情况下,任何类都将通过Object类获取.equals()在接口中有什么方法需要?
我理解集合的get和put原则:如果一个方法接受一个集合,它将写入一个类型T,参数必须是Collection<? super T>,而如果它将读取一个类型T,参数必须是Collection<? extends T>.
但有人可以解释Collections.max()签名:
public static <T> T max(Collection<? extends T> coll,
Comparator<? super T> comp)
Run Code Online (Sandbox Code Playgroud)
特别是为什么它Comparator<? super T>而不是Comparator<? extends T>?
comparator ×10
java ×9
sorting ×3
android ×2
generics ×2
arrays ×1
casting ×1
collections ×1
comparable ×1
double ×1
java-8 ×1
lambda ×1
null ×1
object ×1
ruby ×1
sql-order-by ×1
string ×1