有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用各自的数组ID或值对数组进行排序?

我有两个阵列:

 String [] ids= new String [5];
 String [] points= new String [5];

 String one="a,b,c,d,e";
 //or
 String one="nepal,japan,finland ,brazil,spain";
 String two="100,500,200,400,300";
 ids= one.split(",");
 points= two.split(",");

现在我想按降序对points进行排序,就像这样

500,400,300,200,100 with respective ids b,d,e,c,a

我该怎么做

但我试着按降序排列,这是可以的,但是如何用各自的id排列id

 Arrays.sort(points, Collections.reverseOrder());
 Arrays.toString(points);

或者

Arrays.sort(points);

如果我像ids一样做,它也在下降。但这不是产出

编辑:

如果我有替换

a、b、c、d、e致发明人姓名或时间的信函

String one="a,b,c,d,e";
//  or
String countries = "nepal,japan,finland,brazil,spain";
// or
String time="0:10,1:25,4:00,2:10,0:55";

共 (3) 个答案

  1. # 1 楼答案

    您可以定义自己的Comparator,类似这样:

    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Map;
    
    public class CustomArrayComparator implements Comparator<String>
    {
        private String[] pointsArray;
        private Map<String, Integer> idsMap;
    
        public CustomArrayComparator(String[] pointsArray, String[] countriesArray)
        {
            this.pointsArray = pointsArray;
            idsMap = new HashMap<String, Integer>();
            for(int i = 0; i < pointsArray.length; i++) idsMap.put(countriesArray[i], i);
        }
    
        @Override
        public int compare(String s1, String s2)
        {   
            return pointsArray[idsMap.get(s2)].compareTo(pointsArray[idsMap.get(s1)]);
        }
    }
    

    主要内容如下:

    String[] points = {"100", "500", "200", "400", "300"};
    String[] countries = {"nepal", "japan", "finland", "brazil", "spain"};
    CustomArrayComparator comparator = new CustomArrayComparator(points, countries);
    Arrays.sort(countries, comparator);
    Arrays.sort(points, Collections.reverseOrder());
    
    System.out.println(Arrays.toString(points));
    System.out.println(Arrays.toString(countries));
    

    输出:

    [500, 400, 300, 200, 100]
    [japan, brazil, spain, finland, nepal]
    

    编辑:

    作为一个通用类,下面是具有通用实现的同一个类:

    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Map;
    
    public class CustomArrayComparator<T extends Comparable<T>, E> implements Comparator<T>
    {
        private T[] mainArray;
        private Map<E, Integer> indexesMap;
    
        public CustomArrayComparator(T[] mainArray, E[] associatedArray)
        {
            this.mainArray = mainArray;
            indexesMap = new HashMap<E, Integer>();
            for(int i = 0; i < mainArray.length; i++)
            {
                indexesMap.put(associatedArray[i], i);
            }
        }
    
        @Override
        public int compare(T t1, T t2)
        {   
            return mainArray[indexesMap.get(t2)].compareTo(mainArray[indexesMap.get(t1)]);
        }
    }
    

    主要问题是:

    String[] points = {"100", "500", "200", "400", "300"};
    String[] countries = {"nepal", "japan", "finland", "brazil", "spain"};
    Comparator<String> comparator = new CustomArrayComparator<String, String>(points, countries);
    Arrays.sort(countries, comparator);
    Arrays.sort(points, Collections.reverseOrder());
    
    System.out.println(Arrays.toString(points));
    System.out.println(Arrays.toString(countries));
    

    输出:

    [500, 400, 300, 200, 100]
    [japan, brazil, spain, finland, nepal]
    
  2. # 2 楼答案

    Arrays.sort()将只对给定的一个数组进行排序。我将创建一个同时具有idpoint字段的类,该类的一个数组(或集合),并对该数组进行排序。您还必须实现comparable

    或者,可以在两个数组之间进行映射。对points数组排序,然后对ids数组重新排序以匹配映射。(这稍微贵一点,但可能更容易理解。)

  3. # 3 楼答案

    定义一个自定义类(或一对<;T1,T2>;之类的泛型类),并定义一个按第一个值排序的比较器。然后可以执行Arrays.sort(arrayOfPairs,pairComparator)