공용 클래스 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를 구현공용 클래스 비교기 {
@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;
}
}
}
내가 문자열 개체를 정렬하는 비교기를 가지고, 그것은 "StringComparator"를 밝혀 약간의 버그가 있지만 알아낼 수 없습니다.
"StringComparator"는 에서 작동합니다. "Arrays.sort (b, new StringComparator());" 예상대로 출력됩니다. 나는 "StringComparator"을 기준으로 정렬 한 다음 기본 정렬 (다음 단계) 등을 사용할 때
는하지만, 버그가 보여줍니다
"Arrays.sort에 (A) Arrays.sort에 (A, 새로운 StringComparator()) ; "
출력 순서는 동일해야합니다. (배열 a와 b는 동일 함)
누군가 설명 할 수 있습니까? 고마워요 ~
버그라고 생각하기가 어렵습니다 ... –
당신은 compare (Object o1, Object o2)를 오버라이드해야합니다. @Override public int compare (Object o1, Object o2) { return compare ((String) o1, (String) o2); }' – vlaxmi
표준 lexagraphical sorting을 구현하려고합니까? 너는 그렇지 않다. 길이가 같을 때 문자열의 길이로 정렬하고 알파벳 순으로 정렬합니다. – sprinter