Classificar array 2D em Java

  1. Use java.util.Arrays.sort(T[] a, Comparator<? super T> c) para classificar um array 2D dada coluna sábia
  2. Use java.util.Arrays.sort(T[] a) para classificar array 2D com base na linha

Neste tutorial, aprenderemos como classificar um array 2D em Java. Uma matriz 2D é un array cujos elementos são arrays 1-D. Os elementos em un array 2D são organizados em linhas e colunas na forma de un array.

Use java.util.Arrays.sort(T[] a, Comparator<? super T> c) para classificar um array 2D dada coluna sábia

java.util.Arrays.sort(T[] a, Comparator<? super T> c) é um dos poucos métodos utilitários fornecidos pela classe Arrays. Este método classifica a matriz especificada de acordo com a ordem acionada pelo comparador especificado. Os elementos no array devem ser mutuamente comparáveis, portanto, não devem lançar uma ClassCastException.

Aqui, multi é um array bidimensional em forma de matriz que possui três linhas e três colunas. Classificaremos este array tomando sua terceira coluna como referência.

Passamos uma implementação da interface java.util.Comparator para o método Arrays.sort(). A interface Comparator define um método compare que compara seus dois argumentos para o pedido. Ele retorna zero se os objetos passados ​​forem iguais. Ele retorna um valor positivo se primeiro [columnNumber-1] for maior que second[columnNumber-1]. Caso contrário, ele retorna um valor negativo.

A terceira coluna de multi tem 8, 2 e 6 como elementos. Ele compara esses valores e altera a ordem do array 2D em ordem crescente.

import java.util.Arrays;
import java.util.Comparator;

public class Sort2DArray {
    public static void main(String args[]) {
        int[][] multi = new int [][]{
                {4, 9, 8},
                {7, 5, 2},
                {3, 0, 6},

        };
        for(int i = 0; i< multi.length; i++) {
            for (int j = 0; j < multi[i].length; j++)
                System.out.print(multi[i][j] + " ");
                System.out.println();

        }
        //sort according to 3 column
        Sort2DArrayBasedOnColumnNumber(multi,3);
        System.out.println("after sorting");
        for(int i = 0; i< multi.length; i++) {
            for (int j = 0; j < multi[i].length; j++)
                System.out.print(multi[i][j] + " ");
                System.out.println();

        }
    }
    public static  void Sort2DArrayBasedOnColumnNumber (int[][] array, final int columnNumber){
        Arrays.sort(array, new Comparator<int[]>() {
            @Override
            public int compare(int[] first, int[] second) {
               if(first[columnNumber-1] > second[columnNumber-1]) return 1;
               else return -1;
            }
        });
    }
}

Resultado:

4 9 8 
7 5 2 
3 0 6 
after sorting
7 5 2 
3 0 6 
4 9 8 

Use java.util.Arrays.sort(T[] a) para classificar array 2D com base na linha

Aqui no código, array[][] é um array 2D. Possui 4 linhas e 4 colunas. Classificaremos a linha individual deste array usando o método Arrays.sort() que leva um array como argumento. Este método classifica a matriz especificada em ordem numérica crescente.

O método sortRowWise executa um loop for até o comprimento do nosso array. Ele pega uma linha individual de array[][] e a classifica em ordem crescente, mostrada na saída.

import java.util.Arrays;
public class Sort2DArray {
    public static void main(String args[]) {
        int array[][] = {{7, 8, 2, 1},
                {0, 3, 2, 9},
                {6, 5, 3, 2},
                {8, 3, 7, 9}};

        sortRowWise(array);
    }

    static int sortRowWise(int arr[][]) {
        // One by one sort individual rows.
        for (int i = 0; i < arr.length; i++) {
            Arrays.sort(arr[i]);
        }

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++)
                System.out.print(arr[i][j] + " ");
                System.out.println();
        }

        return 0;
    }
}

Resultado:

1 2 7 8
0 2 3 9
2 3 5 6
3 7 8 9

Artigo relacionado - Java Array

  • Inicializar array 2D em Java
  • Imprimir um Array em Java