CodeGym /Java блог /Случаен /Как да разменям обекти в Java?
John Squirrels
Ниво
San Francisco

Как да разменям обекти в Java?

Публикувано в групата
Размяната на обекти е едно от най-популярните действия в програмирането. Това е особено полезно при сортиране. Това, което се случва при размяната, е две променливи, които разменят своите стойности. В тази статия научаваме How да разменяме обекти в Java в два различни случая. Единият разменя независими обекти, а другият разменя два обекта в списък or масив. Нека първо разгледаме размяната на независими обекти.Как да разменям обекти в Java?  - 1

Размяната на обекти е различна от размяната на примитивни типове данни

Един от обичайните методи за използване за размяна на примитивни стойности е използването на времева променлива. Знаете обаче, че Java използва „Предаване по стойност“, когато предава параметри на метод. Следователно размяната на обекти няма да работи Howто очаквате с този метод. Следващият пример ще го покаже.

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;
        }
    }
}
Резултатът: Как да разменям обекти в Java?  - 2Няма размяна! Когато извикаме метода за размяна и подадем обектите, ние предаваме копие на обекта с всички стойности на свойствата. Това е причината да се нарича „Предаване по стойност“. Методът за размяна всъщност разменя обектите, засягайки само копието на оригиналния обект. Така оригиналните обекти се запазват непроменени. Решението за това би било да се използва клас обвивка за обвиване на двата обекта.

Размяна на обекти с обвиващ клас


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;
        }
    }
}
Тук използвахме клас обвивка, който има свойство на типа обекти, които трябва да разменим. Чрез използване на прост метод за размяна, той разменя съдържанието на обектите InnerClass на обектите на клас обвивка. За всяка по-нататъшна реализация на разменените InnerClass обекти, можем да използваме съответно wrapperObj1.xyz и wrapperObj2.xyz. Резултатът:Как да разменям обекти в Java?  - 3

Вграденият метод swap() в Java

Класовете на Java Collections Framework имат вграден метод за размяна на елементи, наречен swap() . Java.util е помощен клас, който съдържа статични методи, които могат да работят с елементи като списъци от интерфейса на колекцията . Използването на метода за размяна е много по-лесно от примера, който обсъдихме по-рано. Методът swap() е статичен метод и затова го извиквате с името на класа като Collections.swap() . Върнатият тип на метода swap() е невалиден, така че няма да върне нищо. Трябва да предадете три аргумента на метода swap() . Вижте бележката по-долу.

swap(List<?> list, int a, int b)
Параметри:
  • списък — списъкът съдържа елементите, които разменяме.
  • a — индекс на елемент за размяна .
  • b — индекс на друг елемент за размяна .
Имайте предвид, че този метод ще хвърли IndexOutOfBoundsException, ако a or b е извън обхвата на размера на списъка. Максималният индекс на списъка е с единица по-малък от размера на списъка. Всяка стойност на индекс над тази ще доведе до хвърляне на IndexOutOfBoundsException. Пример за това How да използвате метода за размяна на ArrayList е показан по-долу.

swap() метод на 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 от плодове съдържа шест елемента. Разменяме 2- ри и 5- ти елемент с помощта на метода на функцията swap() . Най-добрата практика е да напишете метода swap() в блок try-catch, тъй като той може да хвърли IndexOutOfBoundsException по време на изпълнение. Резултатът: Как да разменям обекти в Java?  - 4Ако подадем '2' и '8' като индекси, приложението ще хвърли изключение, тъй като размерът на списъка е шест.

Collections.swap(fruits, 2, 8);
Резултатът ще бъде:Как да разменям обекти в Java?  - 5

Заключение

В този урок обсъдихме няколко техники за размяна, използвани в Java. Единият от тях използва обвиващ клас, а другият използва метода Collection.swap() . Важно е да запомните, че обработката на изключения трябва да се извършва, когато използвате функцията swap() , тъй като тя хвърля изключение по време на изпълнение.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION