同时对两个数组进行排序

Ved*_*dra 2 java arrays sorting

我现在正在学习和理解Java,而在使用数组练习时,我有一个疑问.我编写了以下代码作为示例:

class example
{
    public static void main(String args[])
    {
        String a[] = new String[] {"Sam", "Claudia", "Josh", "Toby", "Donna"};
        int b[] = new int[] {1, 2, 3, 4, 5};

        for(int n=0;n<5;n++)
        {
            System.out.print (a[n] + "...");
            System.out.println (b[n]);
        }
        System.out.println (" ");

        java.util.Arrays.sort(a);

        for(int n=0;n<5;n++)
        {
            System.out.print (a[n] + "...");
            System.out.println (b[n]);
        }
    }
Run Code Online (Sandbox Code Playgroud)

简而言之,这个类创建了两个数组,每个数组有五个空格.它填充了一个来自西翼的人物名字,并用一到五的数字填充另一个.我们可以说这两个字符串中的数据彼此对应.

现在,程序使用其中的名称对数组进行排序Arrays.sort().再次打印数组后,您可以看到虽然名称现在按字母顺序排列,但数字不再对应,因为第二个数组未更改.

如何将第二个数组的内容混洗以匹配第一个数组的排序要求?解决方案还必须灵活,以允许更改程序的范围和大小.请不要发布任何答案,要求我改变我的阵列方法,或提出一种更"有效"的做事方式.这是出于教育目的,我想直接解决所提供的示例代码.提前致谢!

编辑:我不想创建一个额外的类,但我认为通过嵌套循环的某种形式的排序可能是一个选项,而不是Arrays.sort().

Pra*_*rav 9

下面是不使用任何MapCollection 的代码,但是如果你想使用Map那么它变得非常容易.将这两个数组添加到地图中并对其进行排序.

public static void main(String args[]) {
    String a[] = new String[] {
        "Sam", "Claudia", "Josh", "Toby", "Donna"
    };
    int b[] = new int[] {
        1, 2, 3, 4, 5
    };
    for (int n = 0; n < 5; n++) {
        System.out.print(a[n] + "...");
        System.out.println(b[n]);
    }
    System.out.println(" ");
    //java.util.Arrays.sort(a);
    /* Bubble Sort */
    for (int n = 0; n < 5; n++) {
        for (int m = 0; m < 4 - n; m++) {
            if ((a[m].compareTo(a[m + 1])) > 0) {
                String swapString = a[m];
                a[m] = a[m + 1];
                a[m + 1] = swapString;
                int swapInt = b[m];
                b[m] = b[m + 1];
                b[m + 1] = swapInt;
            }
        }
    }
    for (int n = 0; n < 5; n++) {
        System.out.print(a[n] + "...");
        System.out.println(b[n]);
    }
}
Run Code Online (Sandbox Code Playgroud)


Rok*_*alj 7

有人建议制作产品类型。仅当元素数量很少时,这才可行。通过引入另一个对象,您为每个元素增加了对象开销(30+字节),并增加了指针的性能损失(也使缓存局部性恶化)。

无对象开销的解决方案

制作第三个数组。用从0到的索引填充它size-1。使用比较器功能轮询对该数组进行排序,并根据您要对其进行排序。

最后,根据索引对两个数组中的元素重新排序。

替代解决方案

自己编写排序算法。这是不理想的,因为您可能会犯一个错误,并且排序效率可能会低于标准。