Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中按特定顺序对数组排序_Java_Performance_Sorting - Fatal编程技术网

在java中按特定顺序对数组排序

在java中按特定顺序对数组排序,java,performance,sorting,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

我正在尝试将数组按特定顺序排序。例如,我有一个数组

{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];

            }
        }
    }
}
公共类排序{
静态int[]list={6,1,1,5,6,1,6,4,6};
静态int[]排序={4,1,6,5};
静态int[]newList=newint[list.length];
静态整数计数=0;
公共静态void main(字符串[]args){
for(int i=0;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));
}
publicstaticvoidmain(字符串[]args){
整数[]列表={6,1,1,5,6,1,6,4,6};
int[]排序={4,1,6,5};
映射顺序=新的HashMap();
for(int i=0;iorder.get(a)-order.get(b));
System.out.println(Arrays.toString(list));
}

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

您可以使用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));
}
publicstaticvoidmain(字符串[]args){
整数[]列表={6,1,1,5,6,1,6,4,6};
int[]排序={4,1,6,5};
映射顺序=新的HashMap();
for(int i=0;iorder.get(a)-order.get(b));
System.out.println(Arrays.toString(list));
}
输出为
[4,1,1,1,6,6,6,5]

如果您

  • 提前知道可能的因素
  • 而且数量相对较少
你可以简单地数一数:

int stats[]=new int[7]; // "largest possible element"+1
for(int i=0;i<list.length;i++)
  stats[list[i]]++;
int stats[]=new int[7];//“最大可能元素”+1
对于(int i=0;i如果

  • 提前知道可能的因素
  • 而且数量相对较少
你可以简单地数一数:

int stats[]=new int[7]; // "largest possible element"+1
for(int i=0;i<list.length;i++)
  stats[list[i]]++;
int stats[]=new int[7];/“最大可能元素”+1

对于(int i=0;iIs,它保证
sorted
不包含重复的元素?这也会在主题上(但请记住在询问之前阅读他们的帮助中心)。是否保证
sorted
不包含重复的元素?这也会在主题上(但请记住在询问之前阅读他们的帮助中心)