1.compare
对于 public int compare(Object arg0, Object arg1)的理解
//数组排序
String[] str = new String[5];
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return 0;
}
});
//List集合排序
ArrayList<String> list = new ArrayList<String>();
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return 0;
}
});
上述代码中重写了Comparator接口中的compare()方法,有两个参数自定义为 o1 和 o2,默认返回 0,可修改方法体中的内容,返回不同的参数值(整型)
1.如果返回 1 说明o1 > o2 如 2 1
2.如果返回 0 说明o1 = o2 如 cc cc
3.如果返回 -1 说明o1 < o2 如 6 7
也可以调用compareTo()方法在return时对参数进行比较:
2.compareTo
在 Java 中 compareTo() 可以比较的两个对象的类必须都实现 Comparable 接口
String[] str = new String[5];
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
});
等价于:
用下面Lambda表达式更简洁的重写排序方法
Arrays.sort(strArray, (o1, o2) -> o1.compareTo(o2));
compareTo()方法返回值为 int 类型,比较两个值,如:o1.compareTo(o2)。
返回1,0,-1同 compare() 方法的参数比较一样。
比较方法:
(1) 字符串与对象进行比较
(2) 按字典顺序比较两个字符串
比较过程:
先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至得到最终结果或者其中一个参数结束。
String a = "a";
String b = "b";
print(String.valueOf(a.compareTo(b)));// 输出 -1
补充:
1.在 Java 中,equals() 和 compareTo(), 包括compare()的实现, 在比较两个对象的时候,都会先做一个判断,判断二者是否是同一对象。这里就用到了 == ,比较的是这两个引用存的是否是同一地址
2.在 Java 中,equals()方法 x.equals(null) 返回的是false。 而 x.compareTo(null) 返回的则是NullPointerException,这个得注意了。