Рубрики

Как поменять или обменять объекты в Java?

Как поменять объекты в Java?
Допустим, у нас есть класс «Автомобиль» с некоторыми атрибутами. И мы создаем два объекта Car, скажем, car1 и car2, как обмениваться данными car1 и car2?

Простое решение заключается в обмене членами. Например, если у класса Car есть только один целочисленный атрибут, скажем «нет» (номер машины), мы можем поменять местами автомобили, просто поменяв местами членов двух машин.

// Java-программа, демонстрирующая, что мы можем поменять местами два
// объекты меняются членами.

  
// Автомобиль с классом номеров Car

class Car

{

    int no;

    Car(int no) { this.no = no; }

}

  
// Класс, который использует объекты Car

class Main

{

    // Поменять местами c1 и c2

    public static void swap(Car c1, Car c2)

    {

        int temp = c1.no;

        c1.no = c2.no;

        c2.no = temp;

    }

  

    // Метод драйвера

    public static void main(String[] args)

    {

        Car c1 = new Car(1);

        Car c2 = new Car(2);

        swap(c1, c2);

        System.out.println("c1.no = " + c1.no);

        System.out.println("c2.no = " + c2.no);

    }

}

Выход:

c1.no = 2
c2.no = 1

Что если мы не знаем членов Car?
Вышеупомянутое решение сработало, поскольку мы знали, что в Car есть один элемент «нет». Что делать, если мы не знаем членов Car или список участников слишком велик. Это очень распространенная ситуация, поскольку класс, который использует какой-то другой класс, может не иметь доступа к членам другого класса . Работает ли нижеприведенное решение?

// Java-программа для демонстрации простого обмена
// ссылки на объекты не работают

  
// Автомобиль с номером и именем

class Car

{

    int model, no;

  

    // Конструктор

    Car(int model, int no)

    {

        this.model = model;

        this.no = no;

    }

  

    // Утилита для печати автомобиля

    void print()

    {

        System.out.println("no = " + no +

                           ", model = " + model);

    }

}

  
// Класс, который использует Car

class Main

{

    // swap () не меняет местами c1 и c2

    public static void swap(Car c1, Car c2)

    {

        Car temp = c1;

        c1 = c2;

        c2 = temp;

    }

  

    // Метод драйвера

    public static void main(String[] args)

    {

        Car c1 = new Car(101, 1);

        Car c2 = new Car(202, 2);

        swap(c1, c2);

        c1.print();

        c2.print();

    }

}

Выход:

no = 1, model = 101
no = 2, model = 202

Как видно из вышеприведенного вывода, объекты не меняются местами. В предыдущем посте мы обсуждали, что параметры передаются по значению в Java. Поэтому, когда мы передаем c1 и c2 в swap (), функция swap () создает копию этих ссылок.

Решение состоит в том, чтобы использовать класс Wrapper. Если мы создадим класс-обертку, который содержит ссылки на Car, мы можем поменять автомобили, поменяв местами ссылки на класс-обертку.

// Java-программа для демонстрации того, что мы можем использовать оболочку
// классы для обмена на объекты

  
// Автомобиль с моделью и нет.

class Car

{

    int model, no;

  

    // Конструктор

    Car(int model, int no)

    {

        this.model = model;

        this.no = no;

    }

  

    // Утилита для вывода сведений об объекте

    void print()

    {

        System.out.println("no = " + no + 

                           ", model = " + model);

    }

}

  
// Обертка над классом, которая используется для обмена

class CarWrapper

{

   Car c;

  

   // Конструктор

   CarWrapper(Car c)   {this.c = c;}

}

  
// Класс, который использует Car и меняет объекты Car
// используя CarWrapper

class Main

{

    // Этот метод заменяет объекты автомобиля в оболочках

    // cw1 и cw2

    public static void swap(CarWrapper cw1, 

                            CarWrapper cw2)

    {

        Car temp = cw1.c;

        cw1.c = cw2.c;

        cw2.c = temp;

    }

  

    // Метод драйвера

    public static void main(String[] args)

    {

        Car c1 = new Car(101, 1);

        Car c2 = new Car(202, 2);

        CarWrapper cw1 = new CarWrapper(c1);

        CarWrapper cw2 = new CarWrapper(c2);

        swap(cw1, cw2);

        cw1.c.print();

        cw2.c.print();

    }

}

Выход:

no = 2, model = 202
no = 1, model = 101

Таким образом, решение класса-обертки работает, даже если пользовательский класс не имеет доступа к членам класса, чьи объекты необходимо поменять местами.

Эта статья предоставлена Анураг Рай . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Как поменять или обменять объекты в Java?

0.00 (0%) 0 votes