Java Comparator以不同的方式排序
公共类StringComparatorTest{Java Comparator以不同的方式排序,java,string,comparator,Java,String,Comparator,公共类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
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;
}
}
@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;
}
}
@覆盖
公共整数比较(字符串s1、字符串s2){
如果(s1.length()==s2.length()){
如果(s1等于(s2))
返回0;
否则{
对于(int i=0;is2.字符(i)){
返回1;
}否则{
返回-1;
}
}
返回0;
}
}else if(s1.length()
}
公共类StringComparator2实现了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;
}
}
@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;
}
}
@覆盖
公共整数比较(字符串s1、字符串s2){
如果(s1.length()==s2.length()){
对于(int i=0;is2.字符(i)){
返回1;
}如果(s1.字符(i)
}
我必须使用比较器来对字符串对象进行排序,结果发现“StringComparator”有一些错误,但我不知道
“StringComparator”在
Arrays.sort(b,新的StringComparator())
输出命令与预期一致
但当我使用默认排序(以下步骤)然后按“StringComparator”排序时,错误显示:
“数组.排序(a);
Arrays.sort(一个新的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();
}
如果s1.charAt(i)=s2.charAt(i),那么它也返回-1 很难相信这是一个bug…您需要覆盖比较(对象o1,对象o2)
@Override public int compare(Object o1,Object o2){return compare((String)o1,(String)o2);}
您是否正在尝试实现标准的词法排序?你不是。你是按字符串的长度排序,然后在长度相同时按字母顺序排序。谢谢你,我发现了这个问题