جابجایی اشیا یکی از محبوب ترین اقدامات در برنامه نویسی است. به ویژه در مرتب سازی مفید است. آنچه در مبادله اتفاق می افتد این است که دو متغیر مقادیر خود را مبادله می کنند. در این مقاله یاد می گیریم که چگونه اشیاء را در جاوا در دو حالت مختلف تعویض کنیم. یکی مبادله اشیاء مستقل و دیگری مبادله دو شی در یک لیست یا یک آرایه است. اجازه دهید ابتدا مبادله اشیاء مستقل را بررسی کنیم.
هیچ تعویضی وجود نداشت! وقتی متد swap را فراخوانی می کنیم و اشیا را ارسال می کنیم، یک کپی از شی را با تمام مقادیر ویژگی ارسال می کنیم. به همین دلیل است که به آن "Pass by Value" می گویند. روش swap در واقع اشیاء را مبادله می کند که فقط بر روی کپی شی اصلی تأثیر می گذارد. بنابراین اشیاء اصلی بدون تغییر نگه داشته می شوند. راه حل این کار استفاده از یک کلاس wrapper برای بسته بندی دو شی خواهد بود.
اگر «2» و «8» را بهعنوان ایندکس پاس کنیم، برنامه یک استثنا ایجاد میکند زیرا اندازه فهرست شش است.

مبادله اشیاء با مبادله انواع داده های اولیه متفاوت است
یکی از روشهای رایج برای مبادله مقادیر اولیه استفاده از یک متغیر زمانی است. با این حال، میدانید که جاوا هنگام ارسال پارامترها به یک متد از «Pass by Value» استفاده میکند. بنابراین، جابجایی اشیا آنطور که انتظار داشتید با این روش کار نخواهد کرد. مثال زیر آن را نشان خواهد داد.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;
}
}
}
خروجی: 
جابجایی اشیا با کلاس wrapper
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;
}
}
}
در اینجا ما از یک کلاس wrapper استفاده کردیم که دارای خاصیت نوع آبجکت هایی است که باید مبادله کنیم. با استفاده از روش swap ساده، محتوای اشیاء InnerClass از اشیاء کلاس wrapper را مبادله می کند. برای اجرای بیشتر اشیاء InnerClass تعویض شده، میتوانیم از wrapperObj1.xyz و wrapperObj2.xyz استفاده کنیم. خروجی:
متد swap() داخلی در جاوا
کلاس های Java Collections Framework دارای یک متد داخلی برای مبادله عناصر به نام swap() هستند . java.util یک کلاس کاربردی است که شامل متدهای ثابتی است که می تواند روی عناصری مانند Lists از رابط مجموعه کار کند. استفاده از روش swap بسیار ساده تر از مثالی است که قبلاً بحث کردیم. متد ()swap یک متد ثابت است و بنابراین شما آن را با نام کلاس به صورت Collections.swap() فراخوانی می کنید . نوع برگشتی متد swap() باطل است، بنابراین چیزی بر نمی گرداند. شما باید سه آرگومان را به متد ()swap ارسال کنید . یادداشت زیر را بررسی کنید.swap(List<?> list, int a, int b)
مولفه های:
- لیست - لیست شامل عناصری است که ما با هم عوض می کنیم.
- الف - شاخص عنصری که باید مبادله شود .
- 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 میوه ها شامل شش عنصر است. ما عناصر دوم و پنجم را با استفاده از متد تابع swap مبادله می کنیم . بهترین روش این است که متد swap() را در یک بلوک try-catch بنویسید زیرا می تواند در زمان اجرا یک IndexOutOfBoundsException ایجاد کند. خروجی: 
Collections.swap(fruits, 2, 8);
خروجی خواهد بود:
GO TO FULL VERSION