public class 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();
}
}
public class 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;
}
}
}
public class 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,new StringComparator());“
输出订单不同,应该是相同的。 (数组a和b相同)
有人可以解释一下吗? 非常感谢〜
答案 0 :(得分:0)
这可行 - 在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)的on相同
旧代码中的问题似乎就在这里 -
if(s1.charAt(i) > s2.charAt(i)){
return 1;
}else {
return -1;
}
如果s1.charAt(i)== s2.charAt(i)那么它也返回-1;