Размяната на обекти е едно от най-популярните действия в програмирането. Това е особено полезно при сортиране. Това, което се случва при размяната, е две променливи, които разменят своите стойности. В тази статия научаваме How да разменяме обекти в Java в два различни случая. Единият разменя независими обекти, а другият разменя два обекта в списък or масив. Нека първо разгледаме размяната на независими обекти.
Няма размяна! Когато извикаме метода за размяна и подадем обектите, ние предаваме копие на обекта с всички стойности на свойствата. Това е причината да се нарича „Предаване по стойност“. Методът за размяна всъщност разменя обектите, засягайки само копието на оригиналния обект. Така оригиналните обекти се запазват непроменени. Решението за това би било да се използва клас обвивка за обвиване на двата обекта.
Ако подадем '2' и '8' като индекси, приложението ще хвърли изключение, тъй като размерът на списъка е шест.

Размяната на обекти е различна от размяната на примитивни типове данни
Един от обичайните методи за използване за размяна на примитивни стойности е използването на времева променлива. Знаете обаче, че 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;
}
}
}
Резултатът: 
Размяна на обекти с обвиващ клас
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. Резултатът:
Вграденият метод swap() в Java
Класовете на Java Collections Framework имат вграден метод за размяна на елементи, наречен swap() . Java.util е помощен клас, който съдържа статични методи, които могат да работят с елементи като списъци от интерфейса на колекцията . Използването на метода за размяна е много по-лесно от примера, който обсъдихме по-рано. Методът swap() е статичен метод и затова го извиквате с името на класа като Collections.swap() . Върнатият тип на метода swap() е невалиден, така че няма да върне нищо. Трябва да предадете три аргумента на метода swap() . Вижте бележката по-долу.
swap(List<?> list, int a, int b)
Параметри:
- списък — списъкът съдържа елементите, които разменяме.
- a — индекс на елемент за размяна .
- b — индекс на друг елемент за размяна .
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 по време на изпълнение. Резултатът: 
Collections.swap(fruits, 2, 8);
Резултатът ще бъде:
GO TO FULL VERSION