数组 B 参照数组 A 的顺序排序,有没有好的实现方法?

数组A:
[30611,31085 31084 24833 67838 32665 44921 67966 26775 67964 80591 85400 80599 67959 80576 67893 65274 105377 80448 105356 67978 84270 83485 85311 67940 67796 67918 79048 100897 97171 83678 80524 25028 105353 80573 96944 26883 103074 84665 80501 85479 80587 67880 68054 97209]

数组B:
[24833 80576 80448 26883 25028 105353 79048 80587 67978 105356 80524 80591 67918 97171 30611 67796 80599 26775 68054 32665 85400 83485 83678 105377 100897 103074 67940 85479 67880 31084 31085 84270 96944 67893 80501 67959 84665 97209 44921 65274 80573 67964 85311 67838 67966]

数组B里面的元素一定存在于数组A(长度可能小于A),现在需要把数组B按照数组A的顺序进行排序

我只能想到A数组的元素和index形成hash表, 然后遍历数组B根据hash表生成结果。
有没有更好一点的实现方法呢。

阅读 1.6k
1 个回答
    public static void main(String[] args) {
        int[] a = {30611, 31085, 31084, 24833, 67838, 32665, 44921, 67966, 26775, 67964, 80591, 85400, 80599, 67959, 80576, 67893, 65274, 105377, 80448, 105356, 67978, 84270, 83485, 85311, 67940, 67796, 67918, 79048, 100897, 97171, 83678, 80524, 25028, 105353, 80573, 96944, 26883, 103074, 84665, 80501, 85479, 80587, 67880, 68054, 97209};
        int[] b = {24833, 80576, 80448, 26883, 25028, 105353, 79048, 80587, 67978, 105356, 80524, 80591, 67918, 97171, 30611, 67796, 80599, 26775, 68054, 32665, 85400, 83485, 83678, 105377, 100897, 103074, 67940, 85479, 67880, 31084, 31085, 84270, 96944, 67893, 80501, 67959, 84665, 97209, 44921, 65274, 80573, 67964, 85311, 67838, 67966};

        List<Integer> listA = new ArrayList<>();
        List<Integer> listB = new ArrayList<>();

        for (int i : a) {
            listA.add(i);
        }
        for (int i : b) {
            listB.add(i);
        }

        listB.sort(Comparator.comparingInt(listA::indexOf));
        System.out.println(listB);
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题