Java 为什么Collections.max()不返回字符串集合的实际最大值? ArrayList dirNo=new ArrayList(); 董事会增加(“1”); 董事会增补(“2”); 董事会增补(“3”); 董事会增补(“4”); 董事会增加(“5”); 董事会增补(“6”); 董事会增补(“7”); 董事会增补(“8”); 董事会增补(“9”); 董事会增补(“10”); 董事会增补(“11”); System.out.println(“max:+Integer.parseInt(Collections.max(dirNo)));
执行上述代码后,打印9作为输出 但实际上最大值应该是11Java 为什么Collections.max()不返回字符串集合的实际最大值? ArrayList dirNo=new ArrayList(); 董事会增加(“1”); 董事会增补(“2”); 董事会增补(“3”); 董事会增补(“4”); 董事会增加(“5”); 董事会增补(“6”); 董事会增补(“7”); 董事会增补(“8”); 董事会增补(“9”); 董事会增补(“10”); 董事会增补(“11”); System.out.println(“max:+Integer.parseInt(Collections.max(dirNo)));,java,collections,compare,Java,Collections,Compare,执行上述代码后,打印9作为输出 但实际上最大值应该是11 为什么我作为max获得了9 由于元素是字符串,Collections.max()将返回最大的值 如果希望对字符串进行数字比较,则需要使用的双参数版本,并提供适当的比较器: ArrayList<String> dirNo = new ArrayList<String>(); dirNo.add("1"); dirNo.add("2"); dirNo.add("3"); dirNo.add("4"); dirNo.a
为什么我作为max获得了9 由于元素是字符串,
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");
System.out.println("max : " + Integer.parseInt(Collections.max(dirNo)));
ArrayList dirNo=new ArrayList();
董事会增加(“1”);
董事会增补(“2”);
董事会增补(“3”);
董事会增补(“4”);
董事会增加(“5”);
董事会增补(“6”);
董事会增补(“7”);
董事会增补(“8”);
董事会增补(“9”);
董事会增补(“10”);
董事会增补(“11”);
比较器cmp=新比较器(){
@凌驾
公共整数比较(字符串o1、字符串o2){
返回Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
}
};
System.out.println(“max:+Collections.max(dirNo,cmp));
您正在使用字符串集合!字符串比较与数字比较完全不同
字符串值
“2”>“11”
,因为'2'>'1'
(第一个字符差)将字符串更改为整数
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));
ArrayList dirNo=new ArrayList();
就这样。这应该很好用
ArrayList<Integer> dirNo = new ArrayList<Integer>();
String[]allLongestStrings(String[]inputArray){
ArrayList newArray=新ArrayList();
ArrayList arrayIndex=新的ArrayList();
ArrayList longestString=新的ArrayList();
for(int i=0;i=maximumVal){
longestString.add(newArray.get(j));
}
}
String[]stringArray=longestString.toArray(新)
字符串[longestString.size()];
返回字符串数组;
}您正在进行字符串比较。这与整数比较完全不同。更改您的代码使用整数,一切都应该像一个魅力。
String[] allLongestStrings(String[] inputArray) {
ArrayList<String> newArray = new ArrayList<String>();
ArrayList<Integer> arrayIndex = new ArrayList<Integer>();
ArrayList<String> longestString = new ArrayList<String>();
for(int i=0; i < inputArray.length;i++){
newArray.add(inputArray[i]);
arrayIndex.add(inputArray[i].length());
}
int maximumVal = Collections.max(arrayIndex);
for(int j=0; j < newArray.size();j++){
if(newArray.get(j).length() >= maximumVal){
longestString.add(newArray.get(j));
}
}
String[] stringArray = longestString.toArray(new
String[longestString.size()]);
return stringArray;