CodeGym /Java Blogu /Rastgele /Java'da nesneler nasıl değiştirilir?
John Squirrels
Seviye
San Francisco

Java'da nesneler nasıl değiştirilir?

grupta yayınlandı
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.Java'da nesneler nasıl değiştirilir?  - 1

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ı: Java'da nesneler nasıl değiştirilir?  - 2Takas 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.

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 nesneler nasıl değiştirilir?  - 3

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 .
a veya b liste boyutu aralığının dışındaysa, bu yöntemin bir IndexOutOfBoundsException atacağını unutmayın. Listenin maksimum dizini, liste boyutundan bir eksiktir. Bundan daha büyük herhangi bir dizin değeri, IndexOutOfBoundsException'ın atılmasına neden olur. Bir ArrayList'te takas yönteminin nasıl kullanılacağına ilişkin bir örnek aşağıda gösterilmiştir.

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ı: Java'da nesneler nasıl değiştirilir?  - 4'2' ve '8'i dizin olarak iletirsek, listenin boyutu altı olduğu için uygulama bir istisna atar.

Collections.swap(fruits, 2, 8);
Çıktı şöyle olacaktır:Java'da nesneler nasıl değiştirilir?  - 5

Çözüm

Bu eğitimde, Java'da kullanılan birkaç takas tekniğini tartıştık. Bunlardan biri bir sarmalayıcı sınıfı kullanmak, diğeri ise Collection.swap() yöntemini kullanmaktır. Bir çalışma zamanı istisnası oluşturduğundan , swap() işlevi kullanılırken istisna işlemenin yapılması gerektiğini hatırlamak önemlidir .
Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION