簡體   English   中英

Java比較器排序不同

[英]Java Comparator Sort Differently

公共類StringComparatorTest {

public static void main(String[] args) {
    String[] a = {"abc9", "abc", "abc123", "ab9"};
    String[] b = {"abc9", "abc", "abc123", "ab9"};
    String[] c = {"abc9", "abc", "abc123", "ab9"};

    System.out.print("a_Origin     : ");
    printArray(a);
    System.out.print("c_Origin     : ");
    printArray(c);

    System.out.print("a_Default    : ");
    Arrays.sort(a);
    printArray(a);

    System.out.print("c_Default    : ");
    Arrays.sort(c);
    printArray(c);

    System.out.print("a_Customized1: ");
    Arrays.sort(a, new StringComparator());
    printArray(a);

    System.out.print("b_Customized1: ");
    Arrays.sort(b, new StringComparator());
    printArray(b);

    System.out.print("c_Customized2: ");
    Arrays.sort(c, new StringComparator2());
    printArray(c);
}

public static void printArray(String[] arr){
    for (String str: arr) {
        System.out.print(str + " ");
    }
    System.out.println();
}

}

公共類StringComparator實現Comparator {

@Override
public int compare(String s1, String s2) {
    if(s1.length() == s2.length()){
        if(s1.equals(s2))
            return 0;
        else{
            for(int i = 0; i < s1.length(); i++){
                if(s1.charAt(i) > s2.charAt(i)){
                    return 1;
                }else {
                    return -1;
                }
            }
            return 0;
        }
    }else if(s1.length() < s2.length()){
        return -1;
    }else{
        return 1;
    }
}

}

公共類StringComparator2實現Comparator {

@Override
public int compare(String s1, String s2) {
    if (s1.length() == s2.length()) {
        for (int i = 0; i < s1.length(); i++) {
            if (s1.charAt(i) > s2.charAt(i)) {
                return 1;
            } else if (s1.charAt(i) < s2.charAt(i)) {
                return -1;
            }
        }
        return 0;
    } else if (s1.length() < s2.length()) {
        return -1;
    } else {
        return 1;
    }
}

}

我必須使用比較器對String對象進行排序,結果“ StringComparator”存在一些錯誤,但我不知道。

“ StringComparator”在“ Arrays.sort(b,new StringComparator());”處正常工作 輸出順序符合預期。

但是當我使用默認排序(以下步驟),然后按“ StringComparator”排序時,該錯誤顯示:

“ Arrays.sort(a); Arrays.sort(a,新的StringComparator());”

輸出訂單不同,應該相同。 (數組a和b相同)

有人可以解釋一下嗎? 非常感謝〜

這有效-在StringComparator類中進行比較-

public int compare(String s1, String s2) {
        if(s1.length() == s2.length()){
            if(s1.equals(s2))
                return 0;
            else{
                for(int i = 0; i < s1.length(); i++){
                    if(s1.charAt(i) != s2.charAt(i)) {
                        return s1.charAt(i) - s2.charAt(i);
                    }
                }
            }
        }
        return s1.length() - s2.length();
    }

給定數組的結果,該數組首先使用默認排序進行排序,然后使用自定義比較器(a_customized)與使用自定義比較器(b_customized)的結果相同

舊代碼中的問題似乎在這里-

 if(s1.charAt(i) > s2.charAt(i)){
    return 1;
 }else {
    return -1;
 }

如果s1.charAt(i)== s2.charAt(i),那么它也返回-1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM