сортировка 2d массива с использованием встроенной функции сортировки - PullRequest
0 голосов
/ 11 апреля 2020

Я использовал функцию Arrays.sort () для сортировки 2d массива (массив int [] []). Так как я хочу отсортировать его по первому элементу. Например, {{2,3}, {1,4}} основываются на 1-м элементе массива: {{1,4}, {2,3}}. Поэтому я переопределяю функцию сравнения.

Arrays.sort(arr, new Comparator<int[]>() {

    @Override
    public int compare(int[] o1, int[] o2){
        if(o1[0] < o2[0]){
            return -1;
        } else if (o1[0] > o2[0]) {
            return 1;
        } else {
            return 0;
        }
    }

})

Я знаю эту работу сортировки. Но я не понимаю, как это работает. Я думал, что

new Comparator<int[]>  

должно быть

new Comparator<int[][]>

, так как это 2d массив. и внутри функции сравнения должно быть сравнение

o1[0][0]  and  o2[0][0]

Может кто-нибудь помочь мне понять это?

Также это использует Arrays.sort, могу ли я использовать Collections.sort? что отличается между этим?

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Вы передаете массив в методе sort и передаете ему компаратор. Arrays.sort будет использовать итератор для перехода в метод сравнения. Поэтому метод сравнения проверяет элемент в arr [0] .compare (arr [1]) сортирует эти 2 и переходит к следующему итератору. та же концепция применяется с использованием 2d массива. Вы просто проходите 2 массива и говорите, кто и где должен быть расположен.

0 голосов
/ 11 апреля 2020

Помните, что "2D-массив" на самом деле не существует в Java, поэтому вы действительно имеете дело с "массивом int[]" (ничто по своей сути не мешает каждому из этих int[] быть другой длины).

Итак: когда вы сортируете, вы сравниваете отдельные элементы этого «массива int[]» друг с другом, и поскольку каждый элемент является int[], ваш компаратор предназначен для int[] тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...