2013-03-14 25 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))); 

Sau khi thực hiện mã trên, in làm đầu ra.Tại sao Bộ sưu tập.max() không trả lại giá trị tối đa thực tế cho Bộ sưu tập chuỗi?

Nhưng giá trị thực sự tối đa phải là .

Tại sao tôi nhận được là tối đa?

+1

Bạn đang so sánh Chuỗi. Đó là một cái gì đó hoàn toàn khác so với so sánh số nguyên. Thay đổi mã của bạn để sử dụng Integer và mọi thứ sẽ hoạt động như một sự quyến rũ. – Joshua

Trả lời

30

Vì các phần tử của bạn là chuỗi, Collections.max() đang trả về giá trị lớn nhất là lexicographically.

Nếu bạn muốn so sánh chuỗi số lượng, bạn cần phải sử dụng phiên bản hai đối số của Collections.max() và cung cấp một so sánh thích hợp:

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

Bạn đang sử dụng một bộ sưu tập Chuỗi! So sánh chuỗi hoàn toàn khác với số tổng hợp.

String value "2" > "11"'2' > '1' (lần đầu tiên sự khác biệt ký tự)

0

Thay đổi String để Integer

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

Vậy là xong.

Các vấn đề liên quan