Técnicas de Ordenação em Java

JavaBeginner
Pratique Agora

Introdução

A ordenação é uma operação vital na ciência da computação, e o Java oferece diferentes métodos integrados para ordenar diversas estruturas de dados. O Java possui classes distintas disponíveis para ordenar diferentes estruturas. Neste laboratório, exploraremos a ordenação de arrays, coleções e instâncias de classes definidas pelo usuário.

Ordenação de Arrays

Arrays são uma estrutura de dados simples usada para armazenar tipos semelhantes de dados de forma ordenada. Podemos ordenar arrays usando o método integrado sort() da classe Arrays.

Crie ou substitua o arquivo Sorting.java no diretório ~/project com o seguinte código:

import java.util.Arrays;

public class Sorting {
    public static void main(String[] args) {
        int[] arr = {7, 9, 1, 0, 2, 5, 6, 11};
        System.out.println("Array Before Sorting: " + Arrays.toString(arr));
        Arrays.sort(arr);
        System.out.println("Array After Sorting: " + Arrays.toString(arr));
    }
}

Para executar este código, navegue até o diretório ~/project no terminal e execute os seguintes comandos:

javac Sorting.java
java Sorting

Este código ordenará o array em ordem crescente. Se você desejar ordenar um array em ordem decrescente, precisará ordená-lo utilizando a interface Comparator.

Ordenação de Coleções

O Java fornece a classe Collections, que possui um método sort() para ordenar coleções como listas, conjuntos (sets) e mapas. O modelo de operação desta função é semelhante ao método sort() da classe Arrays.

Crie ou substitua o arquivo Sorting.java no diretório ~/project com o seguinte código:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Sorting {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(6);
        list.add(3);
        list.add(8);
        list.add(1);
        list.add(9);

        System.out.println("List before sorting: " + list);

        Collections.sort(list);
        System.out.println("List after sorting: " + list);
    }
}

Para executar este código, navegue até o diretório ~/project no terminal e execute os seguintes comandos:

javac Sorting.java
java Sorting

Ordenação de Conjuntos (Sets)

Conjuntos são usados para armazenar dados não ordenados sem duplicatas. Não podemos ordenar conjuntos diretamente usando o método sort() da classe Collections. No entanto, podemos visualizar os dados ordenados transferindo todos os elementos do conjunto para uma lista e, em seguida, ordenando essa lista.

Crie ou substitua o arquivo Sorting.java no diretório ~/project com o seguinte código:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Sorting {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<Integer>();
        set.add(6);
        set.add(3);
        set.add(-2);
        set.add(1);
        set.add(9);

        List<Integer> list = new ArrayList<Integer>(set);
        Collections.sort(list);
        System.out.println("Set after sorting: " + list);
    }
}

Para executar este código, navegue até o diretório ~/project no terminal e execute os seguintes comandos:

javac Sorting.java
java Sorting

A saída deste código será uma lista de inteiros ordenada.

Ordenação de Mapas

Mapas são usados para armazenar pares de chave-valor. Podemos ordenar mapas com base em suas chaves ou valores. O TreeMap também pode ser usado para armazenar pares de chave-valor em uma ordem classificada.

Crie ou substitua o arquivo Sorting.java no diretório ~/project com o seguinte código:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Sorting {
    public static void main(String[] args) {
        Map<Integer, String> map = new TreeMap<Integer, String>();
        map.put(6, "Apple");
        map.put(3, "Banana");
        map.put(1, "Mango");
        map.put(9, "Orange");

        System.out.println("Map before sorting: " + map);

        // Sorting by keys
        Map<Integer, String> sortedByKeyMap = new TreeMap<Integer, String>(map);
        System.out.println("Map after sorting by keys: " + sortedByKeyMap);

        // Sorting by value
        List<Map.Entry<Integer, String>> list = new ArrayList<Map.Entry<Integer, String>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
            public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
                return (o1.getValue()).compareTo(o2.getValue());
            }
        });

        Map<Integer, String> sortedByValueMap = new LinkedHashMap<Integer, String>();
        for (Map.Entry<Integer, String> entry : list) {
            sortedByValueMap.put(entry.getKey(), entry.getValue());
        }
        System.out.println("Map after sorting by values: " + sortedByValueMap);
    }
}

Para executar este código, navegue até o diretório ~/project no terminal e execute os seguintes comandos:

javac Sorting.java
java Sorting

Este código ordenará o mapa por suas chaves e valores.

Resumo

Este laboratório demonstrou como ordenar diferentes estruturas de dados em Java. Aprendemos como ordenar arrays, coleções e mapas. Também aprendemos como ordenar objetos de classes definidas pelo usuário usando as interfaces Comparable e Comparator. O método sort() das classes Collections e Arrays foi utilizado para ordenar listas e arrays. Por fim, aprendemos como ordenar mapas com base em seus valores e chaves.