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

时间:2011-11-18 09:56:09

标签: java arrays

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

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

我想根据数组中的第3个值进行排序,即16.19

我将如何解决这个问题?

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

结果必须如下:

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

该数组有四个字段[apples,green,9180,16.19];苹果:水果的名称;绿色:水果的颜色; 9180:农场的密码; 16.19:水果产量。我必须根据水果的产量来分类。希望我很清楚。

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

我允许自己假设您没有名为orangesapplesstrawberriesgrapes的四个变量。如果这样做,请在排序之前将它们放在数组中。

Comparable s:

的数组数组进行排序的示例代码
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));

    }

}

输出:

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

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

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

答案 2 :(得分:1)

解释后更新:
我假设您将这些数组存储在列表或其他数组中。在这种情况下,您可以使用Collections.sort()Arrays.sort()。由于sort()只能对其元素具有可比性的数组进行排序,因此必须实现Comparator<Object[]>来比较数组的最后元素并将其传递给sort方法。 Example on comparator

答案 3 :(得分:1)

我们创建一个实现comparator interface的类,并比较传递给构造函数的列上的1D数组元素。现在,我们可以将此类的实例传递给Arrays.sort function,2D数组将在所需的列上排序。
看看这个.. sorting

答案 4 :(得分:0)

尝试此功能

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

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

请参阅此处 - how to sort an array

答案 5 :(得分:0)

问题是:

为什么甚至将属性封装为数组?我更喜欢用于封装的类,称为“Fruits”。在本课程中,您可以实现Comparable Interface或编写单独的Comparator。

之后,你会有这样的事情:

LinkedList<Fruits> myFruits;
Collections.sort(myFruits);

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