Nesneleri değiştirmek, programlamadaki en popüler eylemlerden biridir. Özellikle sıralamada kullanışlıdır. Yer değiştirmede olan şey, değerlerini değiş tokuş eden iki değişkendir. Bu yazıda, iki farklı durumda Java'da nesnelerin nasıl değiştirileceğini öğreniyoruz . Biri bağımsız nesneleri değiştiriyor, diğeri ise bir Liste veya Dizideki iki nesneyi değiştiriyor. Önce değiş tokuş yapan bağımsız nesneleri inceleyelim.
Takas yoktu! Swap yöntemini çağırıp nesneleri ilettiğimizde, nesnenin bir kopyasını, tüm özellik değerleri ile birlikte aktarıyoruz. “Pass by Value” olarak adlandırılmasının nedeni budur. Takas yöntemi, aslında yalnızca orijinal nesnenin kopyasını etkileyen nesneleri değiştirir. Böylece orijinal nesneler değişmeden tutulur. Bunun çözümü, iki nesneyi sarmak için bir sarmalayıcı sınıfı kullanmak olacaktır.
'2' ve '8'i dizin olarak iletirsek, listenin boyutu altı olduğu için uygulama bir istisna atar.

Nesneleri değiştirmek, ilkel veri türlerini değiştirmekten farklıdır
İlkel değerleri değiş tokuş etmek için kullanılan yaygın yöntemlerden biri geçici bir değişken kullanmaktır. Ancak, Java'nın parametreleri bir yönteme geçirirken "Değerle Geç" özelliğini kullandığını biliyorsunuz. Bu nedenle, nesneleri değiştirmek bu yöntemle beklediğiniz gibi çalışmaz. Aşağıdaki örnek bunu gösterecektir.
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;
}
}
}
Çıktı: 
Sarmalayıcı sınıfıyla nesneleri değiştirme
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;
}
}
}
Burada, değiştirmemiz gereken nesnelerin türüne sahip bir sarmalayıcı sınıfı kullandık. Basit bir takas yöntemi kullanarak, sarmalayıcı sınıf nesnelerinin InnerClass nesnelerinin içeriğini değiştirir. Değiştirilen InnerClass nesnelerinin daha fazla uygulanması için, buna göre wrapperObj1.xyz ve wrapperObj2.xyz'yi kullanabiliriz. Çıktı:
Java'da yerleşik swap() yöntemi
Java Collections Framework'ün sınıfları, swap() adı verilen öğeleri değiştirmek için yerleşik bir yönteme sahiptir . Java.util , Koleksiyon arabirimindeki Listeler gibi öğeler üzerinde çalışabilen statik yöntemler içeren bir yardımcı program sınıfıdır. Takas yöntemini kullanmak, daha önce tartıştığımız örnekten çok daha kolaydır. swap () yöntemi statik bir yöntemdir ve bu nedenle onu Collections.swap() olarak sınıf adıyla çağırırsınız . swap() yönteminin dönüş türü geçersizdir, dolayısıyla hiçbir şey döndürmez. swap() yöntemine üç argüman iletmeniz gerekir . Aşağıdaki notu kontrol edin.
swap(List<?> list, int a, int b)
parametreler:
- list — liste, değiştirdiğimiz öğeleri içerir.
- a — değiştirilecek bir öğenin dizini .
- b — değiştirilecek başka bir öğenin dizini .
ArrayList'te swap() yöntemi
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);
}
}
}
Meyvelerin ArrayList'i altı öğe içerir. 2. ve 5. elementleri function swap() metodunu kullanarak değiştiriyoruz . En iyi uygulama , çalışma zamanında bir IndexOutOfBoundsException atabileceği için swap() yöntemini bir try-catch bloğu içine yazmaktır . Çıktı: 
Collections.swap(fruits, 2, 8);
Çıktı şöyle olacaktır:
GO TO FULL VERSION