CodeGym /Blog Java /Random-PL /Jak zamieniać obiekty w Javie?
Autor
Vasyl Malik
Senior Java Developer at CodeGym

Jak zamieniać obiekty w Javie?

Opublikowano w grupie Random-PL
Zamiana obiektów to jedna z najpopularniejszych czynności w programowaniu. Jest to szczególnie przydatne przy sortowaniu. To, co dzieje się podczas zamiany, to dwie zmienne wymieniające swoje wartości. W tym artykule dowiemy się, jak zamieniać obiekty w Javie w dwóch różnych przypadkach. Jedna to zamiana niezależnych obiektów, a druga to zamiana dwóch obiektów na liście lub tablicy. Przyjrzyjmy się najpierw zamianie niezależnych obiektów.Jak zamieniać obiekty w Javie?  - 1

Zamiana obiektów różni się od zamiany pierwotnych typów danych

Jedną z typowych metod zamiany wartości pierwotnych jest użycie zmiennej czasowej. Wiesz jednak, że Java używa „Przekazuj przez wartość” podczas przekazywania parametrów do metody. Dlatego zamiana obiektów nie będzie działać zgodnie z oczekiwaniami w przypadku tej metody. Pokaże to poniższy przykład.

public class ObjectSwapper {
    public static void main(String[] args) {
        InnerClass obj1 = new InnerClass(12345);
        InnerClass obj2 = new InnerClass(11111);
        swap(obj1, obj2);
        System.out.println("Obj1 ID value : " + obj1.id + "\n" + "Obj2 ID value :  " + obj2.id);
    }
    static void swap(InnerClass x, InnerClass y) {
        InnerClass temp;
        temp = x;
        x = y;
        y = temp;
    }
    static class InnerClass {
        public int id;
        public InnerClass(int Id) {
            this.id = Id;
        }
    }
}
Wyjście: Jak zamieniać obiekty w Javie?  - 2Nie było zamiany! Kiedy wywołujemy metodę swap i przekazujemy obiekty, przekazujemy kopię obiektu wraz ze wszystkimi wartościami właściwości. To jest powód, dla którego nazywa się to „Przekazywanie wartości”. Metoda swap faktycznie zamienia obiekty, wpływając tylko na kopię oryginalnego obiektu. Tak więc oryginalne obiekty pozostają niezmienione. Rozwiązaniem tego problemu byłoby użycie klasy opakowania do zawinięcia dwóch obiektów.

Zamiana obiektów z klasą opakowującą


public class ObjectSwapper {
    public static void main(String[] args) {
 
        InnerClass obj1 = new InnerClass(12345);
        InnerClass obj2 = new InnerClass(11111);
        objectWrapper wrapperObj1 = new objectWrapper(obj1);
        objectWrapper wrapperObj2 = new objectWrapper(obj2);
        // Values before swapping
        System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
                + wrapperObj2.innerObject.id + "\n");
        
        swap(wrapperObj1, wrapperObj2);
        
        // Values after swapping
        System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
                + wrapperObj2.innerObject.id);
    }
 
       static void swap(objectWrapper wrapperObj1, objectWrapper wrapperObj2) {
        InnerClass temp;
        temp = wrapperObj1.innerObject;
        wrapperObj1.innerObject = wrapperObj2.innerObject;
        wrapperObj2.innerObject = temp;
    }
 
    static class InnerClass {
        public int id;
        public InnerClass(int Id) {
            id = Id;
        }
    }
 
    static class objectWrapper {
        InnerClass innerObject;
        public objectWrapper(InnerClass objInnner) {
            this.innerObject = objInnner;
        }
    }
}
Tutaj użyliśmy klasy opakowującej, która ma właściwość typu obiektów, które musimy zamienić. Używając prostej metody zamiany, zamienia zawartość obiektów InnerClass obiektów klasy opakowującej. Do dalszej implementacji zamienionych obiektów InnerClass możemy odpowiednio użyć wrapperObj1.xyz i wrapperObj2.xyz. Wyjście:Jak zamieniać obiekty w Javie?  - 3

Wbudowana metoda swap() w Javie

Klasy Java Collections Framework mają wbudowaną metodę zamiany elementów o nazwie swap() . Java.util to klasa narzędziowa zawierająca metody statyczne, które mogą operować na elementach takich jak Listy z interfejsu Collection . Korzystanie z metody zamiany jest znacznie łatwiejsze niż w przykładzie, który omówiliśmy wcześniej. Metoda swap() jest metodą statyczną i dlatego wywołuje się ją z nazwą klasy jako Collections.swap() . Zwracany typ metody swap() to void, więc nic nie zwróci. Do metody swap() należy przekazać trzy argumenty . Sprawdź notatkę poniżej.

swap(List<?> list, int a, int b)
Parametry:
  • list — lista zawiera elementy, które zamieniamy.
  • a — indeks elementu do zamiany .
  • b — indeks innego elementu do zamiany .
Należy zauważyć, że ta metoda zgłosi wyjątek IndexOutOfBoundsException, jeśli a lub b jest poza zakresem rozmiaru listy. Maksymalny indeks listy jest o jeden mniejszy niż rozmiar listy. Każda wartość indeksu większa niż ta spowoduje zgłoszenie wyjątku IndexOutOfBoundsException. Przykład użycia metody swap na tablicy ArrayList pokazano poniżej.

swap() na tablicy ArrayList


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListSwapper {
    public static void main(String[] args) {
        try {
            List fruits = new ArrayList();
            fruits.add("Mango");
            fruits.add("Papaya");
            fruits.add("Apple");
            fruits.add("Orange");
            fruits.add("Watermelon");
            fruits.add("Bael");
            System.out.println("Before swapping : " + fruits);
         //using Collection.swap() method
            Collections.swap(fruits, 2, 5);
            System.out.println("After swapping : " + fruits);
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Index Out of Bound Exception thrown : " + e);
        }
    }
}
ArrayList owoców zawiera sześć elementów. Zamieniamy miejscami drugi i piąty element za pomocą metody funkcji swap() . Najlepszą praktyką jest napisanie metody swap() w bloku try-catch, ponieważ może ona zgłosić wyjątek IndexOutOfBoundsException w czasie wykonywania. Wynik: Jak zamieniać obiekty w Javie?  - 4Jeśli jako indeksy przekażemy „2” i „8”, aplikacja zgłosi wyjątek, ponieważ rozmiar listy wynosi sześć.

Collections.swap(fruits, 2, 8);
Wyjście będzie:Jak zamieniać obiekty w Javie?  - 5

Wniosek

W tym samouczku omówiliśmy kilka technik wymiany używanych w Javie. Jeden z nich używa klasy opakowującej, a drugi metody Collection.swap() . Należy pamiętać, że obsługa wyjątków powinna odbywać się podczas korzystania z funkcji swap() , ponieważ zgłasza ona wyjątek czasu wykonywania.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION