现在有null,2-,2,1+,1+,2+,2-,1-....这样的字段串,进行排序要得到
1-/1+/2-/2/2+   ,即去掉重复的,数字位按从小到大,符号位按 负号,无号,正号排序Java应当如何高效率实现呢?

解决方案 »

  1.   

    楼主有些细节没说清楚。假设输入都为数字加正负号的String
    假设所有数字都不以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+]
      }
    }