在JAVA中对两个或更多数组进行排序

Sorting TWO or more arrays in JAVA

我想根据两个数组的数值对它们进行排序。

1
2
apple[]  = [apples, green, 9180, 16.19];
orange[] = [oranges, orange color, 9180, 25.18];

我想根据数组中的第三个值(即16.19)对其进行排序

我该怎么办?

注释数组声明仅用于说明目的。

结果必须如下所示:

1
2
3
4
String[] apples =     [apples, green, 9180, 16.19];
String[] oranges =    [oranges, orange color, 9180, 25.18];
String[] grapes =     [grapes, green, 9180, 35.16]
String[] strawberry = [strawberries, red, 9180, 45.36]

每行是一个单独的数组。必须根据最后一个数字(即16.19、25.18、35.16)按升序排序

数组有四个字段[苹果,绿色,9180,16.19];苹果:水果的名称;绿色:水果的颜色;9180:农场的pin代码;16.19:水果的产量。我必须根据水果的产量来分类。希望我明白。


我允许自己假设你没有四个变量,分别是orangesapplesstrawberriesgrapes。如果这样做,请在排序之前将它们放入一个数组中。

Comparable的数组进行排序的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class a{

    public static void main(String[]args){

        final int column = 3;
        Comparable[][] a = new Comparable[][]{
            {"oranges","orange color", 9180, 25.18},
            {"apples","green", 9180, 16.19},
            {"strawberries","red", 9180, 45.36},
            {"grapes","green", 9180, 35.16}
        };

        java.util.Arrays.sort(a,
            new java.util.Comparator<Comparable[]>(){
                public int compare(Comparable[]a,Comparable[]b){
                    return a[column].compareTo(b[column]);
                }
        });

        for (Comparable[] c : a)
            System.out.println(java.util.Arrays.toString(c));

    }

}

输出:

1
2
3
4
[apples, green, 9180, 16.19]
[oranges, orange color, 9180, 25.18]
[grapes, green, 9180, 35.16]
[strawberries, red, 9180, 45.36]

如果您想要更通用的东西,您可以定义一个数组比较器,它将比较列作为其构造函数中的参数(参见更新的示例):

1
2
3
4
5
6
7
8
9
class ArrayComparator implements java.util.Comparator<Comparable[]>{
    private int col;
    public ArrayComparator(int col){
        this.col = col;
    }
    public int compare(Comparable[] o1, Comparable[] o2){
        return o1[col].compareTo(o2[col]);
    }
};


您可以将数组封装在一个实现可比较接口的类中。这将使您能够使用您想要的任何比较策略。


我们创建了一个实现comparator interface的类,并比较传递给构造函数的列上的1d数组元素。现在,我们可以将这个类的一个实例传递给Arrays.sort function,二维数组将按照所需的列进行排序。看看这个……排序


解释后更新:
我假设您将这些数组存储在列表或其他数组中。在这种情况下,您可以使用Collections.sort()Arrays.sort()。由于sort()只能对元素相互比较的数组进行排序,因此必须实现一个Comparator来比较数组的最后一个元素并将其传递给排序方法。比较器示例


问题是:

为什么您甚至用属性作为数组来封装项目?我更喜欢一个叫做"水果"的封装类。在这个类中,您可以实现可比较的接口或编写一个单独的比较器。

在那之后,你会得到这样的东西:

1
2
3
4
5
LinkedList<Fruits> myFruits;
Collections.sort(myFruits);

// Optional with passed Comparator, myComparator has to implement Comparator
Collections.sort(myFruits, myComparator)

试试这个功能

1
2
3
4
5
apple[]  = [apples, green, 9180, 16.19];
orange[] = [oranges, orange color, 9180, 25.18];

Arrays.sort(apple);
Arrays.sort(orange);

请参见此处-如何对数组进行排序。