பொருட்களை மாற்றுவது நிரலாக்கத்தில் மிகவும் பிரபலமான செயல்களில் ஒன்றாகும். வரிசைப்படுத்துவதில் இது மிகவும் பயனுள்ளதாக இருக்கும். பரிமாற்றத்தில் என்ன நடக்கிறது என்பது இரண்டு மாறிகள் அவற்றின் மதிப்புகளை பரிமாறிக்கொள்வதாகும். இந்த கட்டுரையில், இரண்டு வெவ்வேறு நிகழ்வுகளில் ஜாவாவில் உள்ள பொருட்களை எவ்வாறு மாற்றுவது என்பதைக் கற்றுக்கொள்கிறோம் . ஒன்று சுயாதீன பொருள்களை மாற்றுவது மற்றொன்று பட்டியல் அல்லது அணிவரிசையில் உள்ள இரண்டு பொருட்களை மாற்றுவது. முதலில் சுதந்திரமான பொருட்களை மாற்றுவதை ஆராய்வோம்.
இடமாற்றம் இல்லை! நாம் swap முறையை அழைத்து பொருள்களை அனுப்பும்போது, அனைத்து சொத்து மதிப்புகளுடன் பொருளின் நகலை அனுப்புகிறோம். இதுவே "பாஸ் பை வேல்யூ" என்று அழைக்கப்படுகிறது. ஸ்வாப் முறை உண்மையில் அசல் பொருளின் நகலை மட்டுமே பாதிக்கும் பொருட்களை மாற்றுகிறது. எனவே அசல் பொருட்கள் மாறாமல் வைக்கப்படுகின்றன. இதற்கு தீர்வாக இரண்டு பொருட்களையும் மடிக்க ஒரு ரேப்பர் வகுப்பைப் பயன்படுத்த வேண்டும்.

பொருள்களை மாற்றுவது என்பது பழமையான தரவு வகைகளை மாற்றுவதில் இருந்து வேறுபட்டது
பழமையான மதிப்புகளை மாற்றுவதற்கான பொதுவான முறைகளில் ஒன்று தற்காலிக மாறியைப் பயன்படுத்துவதாகும். எவ்வாறாயினும், ஒரு முறைக்கு அளவுருக்களை அனுப்பும் போது Java "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;
}
}
}
வெளியீடு: 
ரேப்பர் கிளாஸ் மூலம் பொருட்களை மாற்றுதல்
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 ஆப்ஜெக்ட்களை மேலும் செயல்படுத்துவதற்கு, நாம் wrapperObj1.xyz மற்றும் wrapperObj2.xyz ஆகியவற்றைப் பயன்படுத்தலாம். வெளியீடு:
ஜாவாவில் உள்ளமைக்கப்பட்ட swap() முறை
Java Collections Framework இன் வகுப்புகள் swap() எனப்படும் உறுப்புகளை மாற்றுவதற்கான உள்ளமைக்கப்பட்ட முறையைக் கொண்டுள்ளன . java.util என்பது ஒரு பயன்பாட்டு வகுப்பாகும், இது சேகரிப்பு இடைமுகத்திலிருந்து பட்டியல்கள் போன்ற உறுப்புகளில் செயல்படக்கூடிய நிலையான முறைகளைக் கொண்டுள்ளது . நாம் முன்பு விவாதித்த உதாரணத்தை விட ஸ்வாப் முறையைப் பயன்படுத்துவது மிகவும் எளிதானது. swap () முறை ஒரு நிலையான முறையாகும், எனவே நீங்கள் Collections.swap() என வகுப்புப் பெயருடன் அழைக்கிறீர்கள் . swap() முறையின் திரும்பும் வகை வெற்றிடமாக இருப்பதால், அது எதையும் திருப்பித் தராது. நீங்கள் swap() முறையில் மூன்று வாதங்களை அனுப்ப வேண்டும் . கீழே உள்ள குறிப்பை சரிபார்க்கவும்.
swap(List<?> list, int a, int b)
அளவுருக்கள்:
- list — பட்டியலில் நாம் மாற்றும் கூறுகள் உள்ளன.
- a — மாற்றப்பட வேண்டிய ஒரு தனிமத்தின் குறியீடு .
- b — மாற்றப்பட வேண்டிய மற்றொரு தனிமத்தின் குறியீடு .
வரிசைப்பட்டியலில் swap() முறை
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);
}
}
}
பழங்களின் வரிசைப் பட்டியலில் ஆறு கூறுகள் உள்ளன. செயல்பாடு swap() முறையைப் பயன்படுத்தி 2 வது மற்றும் 5 வது உறுப்புகளை மாற்றுகிறோம் . ஸ்வாப்() முறையை ட்ரை-கேட்ச் பிளாக்கிற்குள் எழுதுவதே சிறந்த நடைமுறையாகும், ஏனெனில் இது இயக்க நேரத்தில் IndexOutOfBoundsException ஐ எறியலாம். வெளியீடு: நாம் '2' மற்றும் '8' ஐ இண்டெக்ஸ்களாகக் கடந்தால், பட்டியலின் அளவு ஆறாக இருப்பதால், பயன்பாடு விதிவிலக்கு அளிக்கும். 
Collections.swap(fruits, 2, 8);
வெளியீடு இருக்கும்:
GO TO FULL VERSION