现在有null,2-,2,1+,1+,2+,2-,1-....这样的字段串,进行排序要得到
1-/1+/2-/2/2+ ,即去掉重复的,数字位按从小到大,符号位按 负号,无号,正号排序Java应当如何高效率实现呢?
1-/1+/2-/2/2+ ,即去掉重复的,数字位按从小到大,符号位按 负号,无号,正号排序Java应当如何高效率实现呢?
解决方案 »
- 在实现自己的可重复带排序List时遇到一个小问题,不知何解!
- 运行多线程是提示没有main方法
- 关于static的问题
- Timer奇怪问题
- 我的这段代码,为什么在写入的时候写进去的内容都是“?”号呢?
- 实现一个函数,在不使用第三个变量下,把两个参数的值对调
- 大家用java时,常写的类一般都有哪些?
- 为什么我这个枚举程序按照书上写的程序有那么多错误,我还改正不了?
- 虚心请教简单问题:java.lang.NullPointerException是如何产生的?应该如何解决?谢谢!
- 初学java,请推荐基本质量高的书籍,谢谢
- BufferedInputStream读取http图片丢失数据问题
- 大家常用的swing界面库有哪些?
假设所有数字都不以0开头
假设比较规则为:先比数字部分大小,再比正负号import java.util.Arrays;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;public class StringSort { public static void main(String[] args) throws Exception { Comparator<String> c = new Comparator<String>() { @Override
public int compare(String s1, String s2) { int len1 = s1.length(), len2 = s2.length();
char c1 = s1.charAt(len1 - 1);
char c2 = s2.charAt(len2 - 1); if( c1 == '+' || c1 == '-' )
len1--;
if( c2 == '+' || c2 == '-' )
len2--; int result = len1 - len2;
if( result != 0 )
return result; for(int i = 0; i < len1; i++) { result = s1.charAt(i) - s2.charAt(i);
if( result != 0 )
return result;
} if( c1 == c2 )
return 0;
else if( c1 == '-' || c2 == '+' )
return -1;
else
return 1;
}
}; Set<String> set = new TreeSet(c);
set.addAll(Arrays.asList(
"2-", "2", "1+", "1+", "2+", "2-", "1-"));
System.out.println(set); // [1-, 1+, 2-, 2, 2+]
}
}