[英]Collections.Sort an ArrayList in java
我在Java中使用此功能:
Collections.sort(an Arraylist, new CustomComparator);
CustomComparator类中的compare方法将返回一个int。 这对排序程序意味着什么? 该值的数目是多少,将如何影响排序过程?
更具体地说,我想在compare方法中比较两个值。 这是我的代码:
import java.util.Comparator;
public abstract class CustomComparator implements Comparator<HLine> {
@Override
public int compare(HLine hl1, HLine hl2) {
return hl1.y < hl2.y;
}
}
我呼吁排序:
Collections.sort(hlines, new comparator());
hlines是具有Point和两个double的对象的Arraylist。 我想比较两个对象中的第二个double。
基本上,如Comparator.compare和Comparable.compareTo的Javadoc中所述,这些方法将返回
作为第一个参数小于,等于或大于第二个参数的负整数,零或正整数。
意思是如果你打电话
new Integer(1).compareTo(0)
它将返回一个负整数,表示必须在1之前对0进行排序。
new Integer(1).compareTo(1)
它将返回0,表示两个值必须在同一级别上排序。
new Integer(1).compareTo(2)
它将返回一个正整数,表示2必须在1之后排序。
要修复您的代码样本,您需要重写compare()
以便它返回一个Integer
,因为现在它返回一个boolean
并且不会编译。
因为您正在尝试比较double
,所以可以简单地更改为
@Override
public int compare(HLine hl1, HLine hl2) {
return hl1.y - hl2.y;
}
sort()方法对元素进行排序,但首先将它们进行比较。出于比较的目的,sort()方法可以使用compare()或compareTo()方法。
现在,如果您只想基于一个属性对元素进行排序,请使用可比接口的compareTo()方法。
并且,如果要基于多个元素对元素进行排序,请使用比较器接口的cmopare()方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.