Java 排列数字以形成最大整数,这是理解比较器的问题

Java 排列数字以形成最大整数,这是理解比较器的问题,java,comparator,Java,Comparator,下面是GFG从给定整数集生成最大数的代码 import java.util.*; public class GFG { static void printLargest(Vector<String> arr){ Collections.sort(arr, new Comparator<String>(){ @Override public int compare(String X, Stri

下面是GFG从给定整数集生成最大数的代码

import java.util.*; 

public class GFG { 


    static void printLargest(Vector<String> arr){ 
    
        Collections.sort(arr, new Comparator<String>(){ 

        @Override
        public int compare(String X, String Y) { 
        
    
        String XY=X + Y; 
        
        String YX=Y + X; 
        
        return XY.compareTo(YX) > 0 ? -1:1; 
    } 
    }); 
        
    Iterator it = arr.iterator(); 

    while(it.hasNext()) 
        System.out.print(it.next()); 
    
    } 
    
    public static void main (String[] args) { 
        
        Vector<String> arr; 
        arr = new Vector<>(); 
        arr.add("54"); 
        arr.add("546"); 
        arr.add("548"); 
        arr.add("60");
        printLargest(arr); 
    } 
} 

在比较器中,我们试图比较通过排列X和Y生成的最终字符串

例如:如果X是“546”,Y是“54”,那么X+Y将是“54654”,Y+X将是“54546”,Y+X>X+Y

算法说明

假设:假设数字不同,以简化问题

让我们使用冒泡排序来理解比较器背后的逻辑。在冒泡排序中,我们不断比较两个连续的元素,直到所有元素都是有序的

将要排序的数组设为
s1、s2、s3、s4…….sn

如果数组中有两个连续的元素X和Y,那么YX>XY 这两个元素的交换将创建一个更大的元素

 s1 + s2 + .... + X + Y  + ..sn  <  s1 + s2 + ..... Y + X + .. sn

但是通过改变Y和X的位置,我们可以创建一个比a更大的元素。因此a不是最大的元素。因此,我们矛盾地证明,该算法产生最大的整数。

那些不是整数,那些是字符串。我怀疑这种排序算法是否真的有效:
compare
方法是不对称的。
 s1 + s2 + .... + X + Y  + ..sn  <  s1 + s2 + ..... Y + X + .. sn
 A = s1 + s2 + ..... X + Y......sn