【发布时间】:2017-03-30 05:33:45
【问题描述】:
公共类 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 实现比较器 {
@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”排序时,错误显示:
" 数组.sort(a); Arrays.sort(a, new StringComparator());"
输出的订单不同,应该是一样的。 (数组a和b相同)
有人能解释一下吗? 非常感谢~
【问题讨论】:
-
很难相信这是一个错误......
-
您需要覆盖比较(对象 o1,对象 o2)。
@Override public int compare(Object o1, Object o2) { return compare((String)o1, (String)o2); } -
您是否正在尝试实现标准的字典排序?你不是。您按字符串长度排序,然后在长度相同时按字母顺序排序。
标签: java string comparator