Создание функции обмена

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В Java обмен примитивных типов данных прост и может быть выполнен с помощью простой переменной присваивания. Однако обмен не примитивных типов данных, таких как объекты, может быть сложным. К счастью, класс java.util.Collections включает метод swap(), который упрощает обмен элементов в списке примитивных и не примитивных типов данных. В этом лабе вы узнаете, как создать функцию обмена с использованием метода Collections.swap().


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("Packages / API") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/generics("Generics") java/FileandIOManagementGroup -.-> java/files("Files") java/FileandIOManagementGroup -.-> java/create_write_files("Create/Write Files") subgraph Lab Skills java/arrays_methods -.-> lab-117432{{"Создание функции обмена"}} java/collections_methods -.-> lab-117432{{"Создание функции обмена"}} java/classes_objects -.-> lab-117432{{"Создание функции обмена"}} java/packages_api -.-> lab-117432{{"Создание функции обмена"}} java/exceptions -.-> lab-117432{{"Создание функции обмена"}} java/arraylist -.-> lab-117432{{"Создание функции обмена"}} java/generics -.-> lab-117432{{"Создание функции обмена"}} java/files -.-> lab-117432{{"Создание функции обмена"}} java/create_write_files -.-> lab-117432{{"Создание функции обмена"}} end

Создайте Java-файл

Сначала создайте Java-файл с именем SwapFunction.java в каталоге ~/project.

touch ~/project/SwapFunction.java

Импортируйте библиотеку java.util

Импортируйте библиотеку java.util, чтобы использовать класс Collections в Java-файле.

import java.util.*;

Объявите функцию, которая принимает список любого типа данных

Объявите функцию, которая будет принимать список любого типа данных. Вы можете указать тип данных с использованием функции обобщений Java. Для этого примера мы создадим функцию с именем swapElements, которая принимает ArrayList объектов String и меняет местами два элемента по указанным индексам.

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

Реализуйте функцию обмена с использованием метода Collections.swap()

В функции swapElements используйте метод Collections.swap() для обмена элементов по указанным индексам.

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

Протестируйте функцию обмена

Протестируйте функцию swapElements, создав ArrayList объектов String, добавив несколько элементов и затем поменяв местами два элемента.

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);
    }
}

Сохраните Java-файл, а затем скомпилируйте и запустите его.

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

Вы должны увидеть следующий вывод:

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

Поменяйте местами несколько элементов в списке

Функцию swapElements можно также использовать для обмена нескольких элементов в списке, вызвав метод Collections.swap() несколько раз.

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);
    }
}

Сохраните Java-файл, а затем скомпилируйте и запустите его.

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

Вы должны увидеть следующий вывод:

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

Обработка исключений

Если указанные индексы выходят за пределы списка, функция swapElements будет выбрасывать исключение IndexOutOfBoundsException. Чтобы обработать это, добавьте блок try-catch в функцию.

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);
    }
}

Сохраните Java-файл, а затем скомпилируйте и запустите его.

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

Вы должны увидеть следующий вывод:

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

Поменяйте местами элементы в массиве

Вы также можете использовать функцию swapElements для обмена элементов в массиве, преобразовав массив в список.

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);
    }
}

Сохраните Java-файл, а затем скомпилируйте и запустите его.

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

Вы должны увидеть следующий вывод:

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

Поменяйте местами элементы в списке пользовательских объектов

Функцию swapElements можно также использовать для обмена элементов в списке пользовательских объектов. Определите класс Person с полями name и age, затем создайте список объектов Person и поменяйте местами два элемента в списке.

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);
    }
}

Сохраните Java-файл, а затем скомпилируйте и запустите его.

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

Вы должны увидеть следующий вывод:

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

Резюме

В этом практическом занятии вы узнали, как создать функцию swap() на Java с использованием метода Collections.swap(). Вы узнали, как создать функцию, которая принимает список любого типа данных, как использовать метод Collections.swap() для обмена двух элементов по указанным индексам и как обрабатывать исключения. Также вы узнали, как менять местами элементы в массиве и в списке пользовательских объектов.