Java中的比较方法有很多,我们来说明一下。
一.有关类自定义的比较方法
1.String的compareTo()方法
compareTo()方法用于两种方式的比较:
- 字符串与对象的比较
- 按字典顺序比较两个字符串
语法格式:
int compareTo(Object o) //o -- 要比较的对象
int compareTo(String anotherString) //anotherString -- 要比较的字符串
返回值类型
返回值为整型,通过每个字符的一一比较,如果第一个字符和参数的第一个字符相等,那么第二个字符和参数做比较,依次类推,直到不等为止,返回该字符的ASCII码差值,如果两个字符串不一样长,可是对应的字符又完全一样那么返回字符串的长度差值。
- 如果两个字符串相等,那么返回0
- 如果此字符串小于字符串参数,那么返回小于0的数
- 如果此字符串大于字符串参数,那么返回大于0的数
二.自定义排序类
我们知道,当我们想对集合或者数组进行排序的时候,我们有两种方法。
- 实现Comparator接口
- 实现Comparable接口
(一).实现Comparator比较器接口
Comparator位于java.util包下。
public interface Comparator<T> {
int compare(T o1, T o2);
//这里我怎么理解呢,我们可以把o1看成右边的元素,02看成左边的元素,
//如果返回值 大于 0 :那么不会调换位置
//如果返回值 等于 0 : 那么不会调换位置
//如果返回值 小于 0 :那么调换两者位置
}
通常我们有以下的使用方法:
public class Compare {
//定义一个内部类
static class ComparatorTest implements java.util.Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
}
//主测试函数
public static void main(String[] args) {
LinkedList<Integer> integers = new LinkedList<>();
integers.add(1);
integers.add(2);
integers.add(3);
integers.add(0);
/*第一种写法,匿名类*/
integers.sort(new Comparator<Integer>() {
@Override
public int compare(Integer t1, Integer t2) {
return -1;
}
});
/*第二种写法,lambda表达式*/
integers.sort((o1, o2) -> o1 - o2);
/*第三中写法,内部类*/
integers.sort( new ComparatorTest());
integers.stream().forEach(System.out::println);
}
}
(二).实现Comparable比较器接口
如果想让一个类有自比较的行为,那么就可以实现这个接口从而变成可比较类,而且接口里面有一个方法需要实现,那就是compareTo方法。
class MyEntity implements Comparable<MyEntity>
{
private int val;
@Override
public int compareTo(MyEntity o) {
if(this.val < o.val)return -1;
if(this.val > o.val)return 1;
return 0;
}
}
这个我们比较容易理解,我们发现前者我们通常会用的会比较多。
网友评论