[英]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.