为什么Collections.max()不返回String集合的实际最大值?

ArrayList dirNo = new ArrayList(); 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))); 

执行上述代码后,打印9作为输出。

但实际上最大值应该是11

为什么我最多得9

由于您的元素是字符串,因此Collections.max()返回按字典顺序排列的最大值。

如果您希望以数字方式比较字符串,则需要使用Collections.max()的双参数版本并提供适当的比较器:

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

您正在使用String集合! 字符串比较与数字比较完全不同。

字符串值"2" > "11"因为'2' > '1' (第一个字符差异)

将String更改为Integer

 ArrayList dirNo = new ArrayList(); 

而已。