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)));

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)));,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

执行上述代码后,打印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.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;