http://zhidao.baidu.com/question/38961689
按照这个网页做的排序,后来把代码改了一下。排出来的数据找不到规律。请高手指点一下。import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;public class Sort implements Comparator<String> {
        private final static int UP = 1;        private final static int DOWM = -1;        private int state;        public Sort(int state) {
                this.state = state;
        }        public Sort() {        }        public int compare(String o1, String o2) {
                if (state == Sort.DOWM) {
                        return sortDown(o1, o2);
                }
                return sortUp(o1, o2);
        }        private int sortUp(String o1, String o2) {
                if (o1.compareTo(o2) < 0) {
                        return -1;
                } else if (o1.compareTo(o2) > 0) {
                        return 1;
                } else {
                        return 0;
                }
        }        private int sortDown(String o1, String o2) {
                if (o1.compareTo(o2) > 0) {
                        return -1;
                } else if (o1.compareTo(o2) < 0) {
                        return 1;
                } else {
                        return 0;
                }
        }        public static void main(String[] args) {
                ArrayList<String> array = new ArrayList<String>();
                
                
                array.add("1892536248");
                array.add("8871951");
                array.add("1893340281");
                array.add("IPCYWD167861");
                array.add("1893877377");
                array.add("1893877377");
                array.add("8870171");
                array.add("8674873");
                array.add("8871953");
                array.add("ADSLD187705");
                Collections.sort(array, new Sort(Sort.DOWM));                for (String str : array) {
                        System.out.println(str);
                }
        }
}
打印结果:为什么号码不按升序排列呢?也看不出是什么规律来,如果实现升序排列呢,请高手指点!IPCYWD167861
ADSLD187705
8871953
8871951
8870171
8674873
1893877377
1893877377
1893340281
1892536248

解决方案 »

  1.   


         List<String> v = new ArrayList<String>();
         v.add("1892536248");
         v.add("8871951");
         v.add("1893340281");
         v.add("IPCYWD167861");
         v.add("1893877377");
         v.add("1893877377");
         v.add("8870171");
         v.add("8674873");
         v.add("8871953");
         v.add("ADSLD187705");     Collections.sort(v, new Comparator<String>() {
             public int compare(String s1, String s2) {
                 return -s1.compareTo(s2);
             }
         });     for(int i = 0; i < v.size(); i++) {
            System.err.println(v.get(i));
         }IPCYWD167861
    ADSLD187705
    8871953
    8871951
    8870171
    8674873
    1893877377
    1893877377
    1893340281
    1892536248
    lz想要什么规则呢?
      

  2.   

    纯数字的号码,要升序呀!想要的结果如下:
    IPCYWD167861
    ADSLD187705
    8674873
    8870171
    8871951
    8871953
    1892536248
    1893340281
    1893877377
    1893877377
      

  3.   

    有规律的,你List里面所有数据都是String那么compareTo方法是利用String的ASCII码制进行比较,虽然你传进去逻辑上是数字,比如“1112”,但数据类型是String比较的时候然后是比较两个字符串,这就是规律
      

  4.   


    List<String> v = new ArrayList<String>();
         v.add("1892536248");
         v.add("8871951");
         v.add("1893340281");
         v.add("IPCYWD167861");
         v.add("1893877377");
         v.add("1893877377");
         v.add("8870171");
         v.add("8674873");
         v.add("8871953");
         v.add("ADSLD187705");     Collections.sort(v, new Comparator<String>() {
             public int compare(String s1, String s2) {
                try {
                   return new Integer(s1).compareTo(new Integer(s2));
                }
                catch(Exception e) {
                   return -s1.compareTo(s2);
                }
             }
          });     for(int i = 0; i < v.size(); i++) {
            System.err.println(v.get(i));
         }
    IPCYWD167861
    ADSLD187705
    8674873
    8870171
    8871951
    8871953
    1892536248
    1893340281
    1893877377
    1893877377
    完全满足需要
      

  5.   

    list的short方法,只是提供简单的排序。lz的规则我还没有怎么看懂:纯数字的号码,要升序呀!那么字母呢?
      

  6.   

    没什么问题啊.sortDown()函数就是让它降序排序,结果是对的啊