为什么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 ();
而已。