Java中的比較方法有很多,我們來說明一下。
一.有關(guān)類自定義的比較方法
1.String的compareTo()方法
compareTo()方法用于兩種方式的比較:
- 字符串與對(duì)象的比較
- 按字典順序比較兩個(gè)字符串
語法格式:
int compareTo(Object o) //o -- 要比較的對(duì)象
int compareTo(String anotherString) //anotherString -- 要比較的字符串
返回值類型
返回值為整型,通過每個(gè)字符的一一比較,如果第一個(gè)字符和參數(shù)的第一個(gè)字符相等,那么第二個(gè)字符和參數(shù)做比較,依次類推,直到不等為止,返回該字符的ASCII碼差值,如果兩個(gè)字符串不一樣長,可是對(duì)應(yīng)的字符又完全一樣那么返回字符串的長度差值。
- 如果兩個(gè)字符串相等,那么返回0
- 如果此字符串小于字符串參數(shù),那么返回小于0的數(shù)
- 如果此字符串大于字符串參數(shù),那么返回大于0的數(shù)
二.自定義排序類
我們知道,當(dāng)我們想對(duì)集合或者數(shù)組進(jìn)行排序的時(shí)候,我們有兩種方法。
- 實(shí)現(xiàn)Comparator接口
- 實(shí)現(xiàn)Comparable接口
(一).實(shí)現(xiàn)Comparator比較器接口
Comparator位于java.util包下。
public interface Comparator<T> {
int compare(T o1, T o2);
//這里我怎么理解呢,我們可以把o1看成右邊的元素,02看成左邊的元素,
//如果返回值 大于 0 :那么不會(huì)調(diào)換位置
//如果返回值 等于 0 : 那么不會(huì)調(diào)換位置
//如果返回值 小于 0 :那么調(diào)換兩者位置
}
通常我們有以下的使用方法:
public class Compare {
//定義一個(gè)內(nèi)部類
static class ComparatorTest implements java.util.Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
}
//主測(cè)試函數(shù)
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表達(dá)式*/
integers.sort((o1, o2) -> o1 - o2);
/*第三中寫法,內(nèi)部類*/
integers.sort( new ComparatorTest());
integers.stream().forEach(System.out::println);
}
}
(二).實(shí)現(xiàn)Comparable比較器接口
如果想讓一個(gè)類有自比較的行為,那么就可以實(shí)現(xiàn)這個(gè)接口從而變成可比較類,而且接口里面有一個(gè)方法需要實(shí)現(xiàn),那就是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;
}
}
這個(gè)我們比較容易理解,我們發(fā)現(xiàn)前者我們通常會(huì)用的會(huì)比較多。