Criando uma Função de Troca (Swap)

JavaBeginner
Pratique Agora

Introdução

Em Java, a troca de tipos de dados primitivos é fácil e pode ser feita com uma simples atribuição de variáveis. No entanto, a troca de tipos de dados não primitivos, como objetos, pode ser complexa. Felizmente, a classe java.util.Collections inclui um método swap() que facilita a troca de elementos em uma lista de tipos de dados primitivos e não primitivos. Neste laboratório, você aprenderá como criar uma função de troca usando o método Collections.swap().

Criar um arquivo Java

Primeiramente, crie um arquivo Java chamado SwapFunction.java no diretório ~/project.

touch ~/project/SwapFunction.java

Importar a biblioteca java.util

Importe a biblioteca java.util para usar a classe Collections no arquivo Java.

import java.util.*;

Declarar uma função que aceita uma lista de qualquer tipo de dado

Declare uma função que aceitará uma lista de qualquer tipo de dado. Você pode especificar o tipo de dado usando o recurso de Generics do Java. Para este exemplo, construiremos uma função chamada swapElements que recebe um ArrayList de objetos String e troca dois elementos em índices especificados.

public class SwapFunction {
    public static <T> void swapElements(ArrayList<T> list, int index1, int index2){
        // swap code goes here
    }
}

Implementar uma função de troca (swap) usando o método Collections.swap()

Na função swapElements, use o método Collections.swap() para trocar os elementos nos índices especificados.

public class SwapFunction {
    public static <T> void swapElements(ArrayList<T> list, int index1, int index2){
        Collections.swap(list, index1, index2);
    }
}

Testar a função de troca (swap)

Teste a função swapElements criando um ArrayList de objetos String, adicionando alguns elementos e, em seguida, trocando dois elementos.

public class SwapFunction {
    public static <T> void swapElements(ArrayList<T> list, int index1, int index2){
        Collections.swap(list, index1, index2);
    }

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(Arrays.asList("apple", "banana", "orange", "kiwi"));
        System.out.println("Before Swap: " + list);
        swapElements(list, 0, 2);
        System.out.println("After Swap: " + list);
    }
}

Salve o arquivo Java, compile-o e execute-o.

javac ~/project/SwapFunction.java && java SwapFunction

Você deve ver a seguinte saída:

Before Swap: [apple, banana, orange, kiwi]
After Swap: [orange, banana, apple, kiwi]

Trocar múltiplos elementos em uma lista

A função swapElements também pode ser usada para trocar múltiplos elementos em uma lista, chamando o método Collections.swap() várias vezes.

public class SwapFunction {
    public static <T> void swapElements(ArrayList<T> list, int index1, int index2){
        Collections.swap(list, index1, index2);
    }

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(Arrays.asList("apple", "banana", "orange", "kiwi"));
        System.out.println("Before Swap: " + list);
        swapElements(list, 0, 3);
        swapElements(list, 1, 2);
        System.out.println("After Swap: " + list);
    }
}

Salve o arquivo Java, compile-o e execute-o.

javac ~/project/SwapFunction.java && java SwapFunction

Você deve ver a seguinte saída:

Before Swap: [apple, banana, orange, kiwi]
After Swap: [kiwi, orange, banana, apple]

Lidar com exceções

Se os índices especificados estiverem fora dos limites da lista, a função swapElements lançará uma exceção IndexOutOfBoundsException. Para lidar com isso, adicione um bloco try-catch à função.

public class SwapFunction {
    public static <T> void swapElements(ArrayList<T> list, int index1, int index2){
        try {
            Collections.swap(list, index1, index2);
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(Arrays.asList("apple", "banana", "orange", "kiwi"));
        System.out.println("Before Swap: " + list);
        swapElements(list, 0, 4); // out of bounds index
        swapElements(list, 1, 2);
        System.out.println("After Swap: " + list);
    }
}

Salve o arquivo Java, compile-o e execute-o.

javac ~/project/SwapFunction.java && java SwapFunction

Você deve ver a seguinte saída:

Before Swap: [apple, banana, orange, kiwi]
Error: Index 4 out of bounds for length 4
After Swap: [apple, orange, banana, kiwi]

Trocar elementos em um array

Você também pode usar a função swapElements para trocar elementos em um array convertendo o array em uma lista.

public class SwapFunction {
    public static <T> void swapElements(ArrayList<T> list, int index1, int index2){
        try {
            Collections.swap(list, index1, index2);
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }

    public static void main(String[] args) {
        String[] array = {"apple", "banana", "orange", "kiwi"};
        ArrayList<String> list = new ArrayList<>(Arrays.asList(array));
        System.out.println("Before Swap: " + list);
        swapElements(list, 0, 3);
        swapElements(list, 1, 2);
        System.out.println("After Swap: " + list);
    }
}

Salve o arquivo Java, compile-o e execute-o.

javac ~/project/SwapFunction.java && java SwapFunction

Você deve ver a seguinte saída:

Before Swap: [apple, banana, orange, kiwi]
After Swap: [kiwi, orange, banana, apple]

Trocar elementos em uma lista de objetos personalizados

A função swapElements também pode ser usada para trocar elementos em uma lista de objetos personalizados. Defina uma classe Person com os campos name e age, então crie uma lista de objetos Person e troque dois elementos na lista.

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String toString() {
        return name + " (" + age + ")";
    }
}

public class SwapFunction {
    public static <T> void swapElements(ArrayList<T> list, int index1, int index2){
        try {
            Collections.swap(list, index1, index2);
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }

    public static void main(String[] args) {
        ArrayList<Person> list = new ArrayList<>();
        list.add(new Person("Alice", 25));
        list.add(new Person("Bob", 30));
        list.add(new Person("Charlie", 35));
        list.add(new Person("David", 40));

        System.out.println("Before Swap: " + list);
        swapElements(list, 0, 3);
        swapElements(list, 1, 2);
        System.out.println("After Swap: " + list);
    }
}

Salve o arquivo Java, compile-o e execute-o.

javac ~/project/SwapFunction.java && java SwapFunction

Você deve ver a seguinte saída:

Before Swap: [Alice (25), Bob (30), Charlie (35), David (40)]
After Swap: [David (40), Charlie (35), Bob (30), Alice (25)]

Resumo

Neste laboratório, você aprendeu como criar uma função swap() em Java usando o método Collections.swap(). Você aprendeu como criar uma função que aceita uma lista de qualquer tipo de dado, como usar o método Collections.swap() para trocar dois elementos em índices especificados e como lidar com exceções. Você também aprendeu como trocar elementos em um array e em uma lista de objetos personalizados.