2013-03-14 61 views
9
ArrayList<String> dirNo = new ArrayList<String>(); 

dirNo.add("1"); 
dirNo.add("2"); 
dirNo.add("3"); 
dirNo.add("4"); 
dirNo.add("5"); 
dirNo.add("6"); 
dirNo.add("7"); 
dirNo.add("8"); 
dirNo.add("9"); 
dirNo.add("10"); 
dirNo.add("11"); 

System.out.println("max : " + Integer.parseInt(Collections.max(dirNo))); 

執行上面的代碼後,打印作爲輸出。爲什麼Collections.max()不會返回字符串集合的實際最大值?

但實際上最大值應該是。

爲什麼我得到 as max?

+1

你在做字符串比較。這與整數比較完全不同。改變你的代碼使用整數,一切都應該像一個魅力。 – Joshua 2013-03-14 07:09:18

回答

30

由於您的元素是字符串,因此Collections.max()返回的值是最大的lexicographically

如果你想串數字比較,你需要使用的Collections.max()兩個參數版本,並提供一個合適的比較:

ArrayList<String> dirNo = new ArrayList<String>(); 

    dirNo.add("1"); 
    dirNo.add("2"); 
    dirNo.add("3"); 
    dirNo.add("4"); 
    dirNo.add("5"); 
    dirNo.add("6"); 
    dirNo.add("7"); 
    dirNo.add("8"); 
    dirNo.add("9"); 
    dirNo.add("10"); 
    dirNo.add("11"); 

    Comparator<String> cmp = new Comparator<String>() { 
     @Override 
     public int compare(String o1, String o2) { 
      return Integer.valueOf(o1).compareTo(Integer.valueOf(o2)); 
     } 
    }; 
    System.out.println("max : " + Collections.max(dirNo, cmp)); 
1

您正在使用一個字符串集合!字符串比較與數字比較完全不同。

字符串值"2" > "11"因爲'2' > '1'(第一個字符的區別)

0

更改字符串到整數

ArrayList<Integer> dirNo = new ArrayList<Integer>(); 

就是這樣。

相關問題