java - java中按特定顺序对数组进行排序

标签 java performance sorting

我正在尝试按特定顺序对数组进行排序。例如,我有这个数组

{6,1,1,5,6,1,5,4,6}

我希望它们按照这个顺序排序

{4,1,6,5}

预期的新数组是

 {4,1,1,1,6,6,6,6,5}

我的想法是这样的,

public class Sort {

    static int[] list = { 6, 1, 1, 5, 6, 1, 6, 4, 6 };
    static int[] sorted = { 4, 1, 6, 5 };
    static int[] newList = new int[list.length];
    static int count = 0;

    public static void main(String[] args) {
        for (int i = 0; i < sorted.length; i++) {
            for (int j = 0; j < list.length; j++) {

                if (list[j] != sorted[i])
                    continue;
                else
                    newList[count++] = sorted[i];

            }
        }
    }
}

它工作得很好,但是,我不确定这是否是在速度和内存方面最快、最简单的方法,因为列表可能有太多数字。

最佳答案

您可以使用带有自定义比较器的java内置排序算法。

public static void main(String[] args) {

    Integer[] list = { 6, 1, 1, 5, 6, 1, 6, 4, 6 };
    int[] sorted = { 4, 1, 6, 5 };

    Map<Integer, Integer> order = new HashMap<>();
    for (int i = 0; i < sorted.length; i++)
        order.put(sorted[i], i);

    Arrays.sort(list, (a ,b) -> order.get(a) - order.get(b));

    System.out.println(Arrays.toString(list));
}

输出为[4, 1, 1, 1, 6, 6, 6, 6, 5]

关于java - java中按特定顺序对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51571451/

相关文章:

C++冒泡排序动态分配数组

java - 如何使用暂停、线程(任务、服务)模拟队列和堆栈 JavaFX

java - 为什么老年代对象会被小 GC 清除

javascript - 减少用于加速交互的 jquery 选择器的数量

c - 击败或满足 OS X memset(和 memset_pattern4)

c - 使用双指针对字符串中的字母进行排序

java - 如何从字符串数组列表中随机选择

java - 新的 cassandra 绑定(bind)语句 getDate 方法

java - jHiccup:直方图数据似乎不一致

Mysql 排名靠左 JOIN