logo

Java'da Değişmez Liste

Java'da değişmez bir liste, oluşturulduktan sonra değiştirilemeyen bir listedir. Liste oluşturulduktan sonra listedeki öğeleri ekleme, kaldırma veya değiştirme girişimi bir istisna oluşturacaktır.

Değişmez listeleri kullanmanın birincil yararı, iş parçacığı güvenliği sağlamaları ve kodu daha sağlam hale getirmeleridir. Liste oluşturulduktan sonra değiştirilemediğinden, birden fazla iş parçacığının aynı anda listeyi değiştirmeye çalışması ve sorunlara neden olması riski yoktur. Ek olarak, değiştirilemez listeler, istenmeden değiştirilme korkusu olmadan farklı program bölümleri arasında kolayca paylaşılabilir.

Genel olarak, Java'da değişmez listelerin kullanılması, özellikle paylaşılan veri yapılarının sorunlara neden olabileceği çok iş parçacıklı ortamlarda, bir programın güvenliğini ve sağlamlığını artırabilir.

Sınıf Beyanı

Java'da, Değişmez Liste sınıf işin bir parçası Guava Birkaç değişmez koleksiyon sınıfı sağlayan kütüphane. Kullanmak Değişmez Liste , ilk önce içe aktarıyoruz com.google.common.collect içeren paket Değişmez Liste sınıf.

Sınıf beyanı Değişmez Liste Şöyleki:

 public abstract class ImmutableList extends ImmutableCollection implements List 

Değişmez Liste uzatır Değişmez Koleksiyon sınıf ve uygular Liste arayüz. Bu genel bir sınıftır, yani bir sınıf oluşturabiliriz. Değişmez Liste herhangi bir veri türünden. VE bildirimde herhangi bir sınıf veya arayüz adıyla değiştirebileceğimiz type parametresini temsil eder.

Sınıf hiyerarşisi

Değişmez Liste sınıf bunu uygular Liste arayüzdür ve oluşturulduktan sonra değiştirilemeyecek bir listeyi temsil eder.

Sınıf hiyerarşisi Değişmez Liste Şöyleki:

 java.lang.Object com.google.common.collect.ImmutableCollection com.google.common.collect.ImmutableList 

Burada, Değişmez Koleksiyon iskelet uygulamasını sağlayan soyut bir sınıftır. Değişmez Koleksiyon arayüz, hangi Değişmez Liste uzanır.

Genel olarak, Değişmez Liste class, Java'da değişmez listeler oluşturmak ve kullanmak için kullanışlı ve etkili bir yol sağlar.

ImmutableList Oluşturma

Kullandığınız Java sürümüne ve mevcut kitaplıklara bağlı olarak Java'da ImmutableList oluşturmanın farklı yolları vardır. İşte bazı örnekler:

Amerika'daki şehrin adı

1. Java 9 of() yöntemini kullanarak:

Java 9, List arayüzünde, değişmez listeleri daha kısa ve okunabilir şekilde oluşturan of() adı verilen yeni bir yöntemi tanıttı. of() yöntemi, değişken sayıda argüman alan ve bu öğeleri içeren değişmez bir liste döndüren bir fabrika yöntemidir. ArrayList, LinkedList ve ImmutableList dahil olmak üzere List arayüzünü uygulayan herhangi bir sınıfla kullanılabilir. of() yöntemini kullanmanın bir avantajı, çok daha kısa olması ve bağımsız değişkenler üzerinde tür çıkarımı yaparak derleme zamanı güvenliği sağlaması ve Listeye yalnızca doğru türdeki nesnelerin eklenmesini sağlamasıdır. Genel olarak of() yöntemi, Java'da değişmez listelerin oluşturulmasını kolaylaştırır.

Çözümü bulma adımları aşağıda belirtilmiştir.

  1. List sınıfını Java.util paketinden içe aktarın: Bu, programın nesne listeleri oluşturmak ve değiştirmek için List arayüzünü kullanmasına olanak tanır.
  2. Java 9 fabrika yöntemini kullanarak değişmez bir liste oluşturun: Kod, dört öğeli değişmez bir dize listesi oluşturmak için List.of() yöntemini kullanır.
  3. Listeyi değiştirme girişimi: Program, değişmez listelerde izin verilmeyen add() yöntemini kullanarak değişmez listeye bir öğe eklemeye çalışır. Sonuç olarak program, add() yöntemi tarafından oluşturulan UnsupportedOperationException'ı yakalar ve listenin değiştirilemeyeceğini belirten bir mesaj yazdırır.

Dosya adı: ImmutableListExample.java

 // Import the required List class from the Java.util package import java.util.List; // Define the class name public class ImmutableListExample { public static void main(String[] args) { // Create an immutable list using the Java 9 factory of() method List fruits = List.of('apple', 'banana', 'orange', 'grape'); // Print the elements of the List System.out.println('Fruits: ' + fruits); // Try to modify the List (will throw UnsupportedOperationException) try { fruits.add('pineapple'); } catch (UnsupportedOperationException ex) { System.out.println('Cannot modify immutable list.'); } } } 

Çıktı:

 Fruits: [apple, banana, orange, grape] Cannot modify immutable List. 

2. Guava kütüphanesindeki ImmutableList.Builder sınıfını kullanarak:

Listeye öğelerin akıcı bir tarzda eklenmesi, aşamalı olarak liste oluşturulmasını kolaylaştırıyor.

Kullanılan yönteme bakılmaksızın, ortaya çıkan ImmutableList'e diğer herhangi bir liste gibi erişilebilir ve yinelenebilir, ancak içeriği değiştirilemez.

Verilen kod için adım adım çözüm aşağıda verilmiştir:

  1. Gerekli sınıfları içe aktarın: List arayüzünü ve ImmutableList sınıfını com.google.common.collect paketinden içe aktarın.
  2. Oluşturucuyu kullanarak değişmez bir liste oluşturun: ImmutableList oluşturucuyu kullanarak değişmez bir liste oluşturun. Listeye öğe eklemek için add() yöntemini kullanın ve değişmez bir liste oluşturmak için build() yöntemini çağırın.
  3. Mevcut bir listeden değişmez bir liste oluşturun: İstenilen öğelere sahip bir Liste nesnesi oluşturun. Daha sonra değişmez bir liste oluşturmak için List'i parametre olarak ileterek ImmutableList.copyOf() yöntemini çağırın.
  4. Daha fazla öğe ekleme: addAll() yöntemini kullanarak daha fazla öğe eklemek için ImmutableList oluşturucuyu kullanın ve değişmez bir liste oluşturmak için build() yöntemini çağırın.
  5. Listeleri yazdırın: Değişmez listelerin içeriğini yazdırmak için System.out.println() yöntemini kullanın.

Uygulama:

Dosya adı: ImmutableListExample.java

 import java.util.List; import com.google.common.collect.ImmutableList; public class ImmutableListExample { public static void main(String[] args) { // Creating an immutable list using the builder ImmutableList immutableList1 = ImmutableListbuilder() .add('Welcome') .add('to') .add('home') .build(); // Creating an immutable list from an existing list List existingList = List.of('Welcome', 'to', 'home', 'Think'); ImmutableList immutableList2 = ImmutableList.copyOf(existingList); // Creating an immutable list from an existing list and adding more elements ImmutableList immutableList3 = ImmutableList.builder() .addAll(existingList) .add('Big') .build(); // Let's print the lists System.out.println('Immutable List 1: ' + immutableList1); System.out.println('Immutable List 2: ' + immutableList2); System.out.println('Immutable List 3: ' + immutableList3); } } 

Çıktı:

 Immutable List 1: [Welcome, to, home] Immutable List 2: [Welcome, to, home, Think] Immutable List 3: [Welcome, to, home, Think, Big] 

3. ImmutableList sınıfının of() yöntemini kullanarak

Guava kütüphanesindeki ImmutableList sınıfının of() yöntemi, sabit sayıda öğeye sahip değişmez bir liste oluşturmanıza olanak tanır. Liste oluşturulduktan sonra öğelerini ekleyemez, kaldıramaz veya değiştiremezsiniz.

Dosya adı: ImmutableListExample.java

 import com.google.common.collect.ImmutableList; import java.util.List; class ImmutableListExample { public static void main(String[] args) { // Create an immutable list using the Guava library's ImmutableList class ImmutableList fruits = ImmutableList.of('apple', 'banana', 'orange', 'grape'); // Print the contents of the immutable List System.out.println('Fruits: ' + fruits); } } 

Çıktı:

bir komut dosyası nasıl çalıştırılır
 Fruits: [apple, banana, orange, grape] 

4. copyOf() yöntemini kullanarak

Java'da, copyOf() yöntemi, mevcut bir diziyi belirtilen uzunlukta kopyalayan yeni bir dizi oluşturur. Yöntem iki argüman alır: kopyalanacak dizi ve yeni dizinin uzunluğu.

Dosya adı: ImmutableListExample.java

 import com.google.common.collect.ImmutableList; import java.util.*; class ImmutableListExample { public static void main(String[] args) { // Create an ArrayList and add elements to it List myArrayList = new ArrayList(); myArrayList.add('Java'); myArrayList.add('Python'); myArrayList.add('C++'); // Create an immutable list using the Guava library's ImmutableList class and the copyOf() method ImmutableList immutableList1 = ImmutableList.copyOf(myArrayList); // Create an array and convert it to a list String[] myArray = {'Learning', 'Web', 'Development', 'is', 'Fun'}; List myList = Arrays.asList(myArray); // Create an immutable list using the Guava library's ImmutableList class and the copyOf() method ImmutableList immutableList2 = ImmutableList.copyOf(myList); // Print the contents of the immutable lists System.out.println('Immutable List 1: ' + immutableList1); System.out.println('Immutable List 2: ' + immutableList2); } } 

Çıktı:

 Immutable List 1: [Java, Python, C++] Immutable List 2: [Learning, Web, Development, is, Fun] 

5.DesteklenmeyenOperasyonİstisnası

Program, Java'da Collections.unmodifiableList yöntemini kullanarak değişmez bir liste oluşturmayı gösterir. Ayrıca, Listeyi değiştirmeye çalışırken oluşan UnsupportedOperationException durumunun nasıl ele alınacağını gösterir.

Çözümü bulma adımları aşağıda belirtilmiştir:

  1. İlk önce değişken bir tane oluşturuyoruz Dizi Listesi kullanarak bazı başlangıç ​​elemanlarını içeren ile ilgili değişmez bir liste döndüren yöntem. Daha sonra bunu geçiyoruz Dizi Listesi -e Koleksiyonlar.undeğiştirilemezList Listenin değişmez bir görünümünü döndüren yöntem.
  2. Değiştirilemez Listeyi kullanarak değiştirmeye çalışıyoruz. ekle Kaldır , Ve ayarlamak Liste değişmez olduğundan, onu değiştirmeye çalışmak bir hataya yol açacaktır. DesteklenmeyenOperationException .
  3. biz yakalarız DesteklenmeyenOperationException Bu atılır ve konsola hangi işlemin denendiğini ve başarısız olduğunu belirten bir mesaj yazdırılır.

Şunu unutmayın: Koleksiyonlar.undeğiştirilemezList yöntem yalnızca orijinal Listenin değişmez bir görünümünü oluşturur. Orijinal Liste değiştirilirse, değişmez görünüm bu değişiklikleri yansıtacaktır. Hiçbir şekilde değiştirilemeyen, gerçekten değişmez bir liste oluşturmak için, aşağıdakilerin özel bir uygulamasını kullanabilirsiniz: Liste Listeyi değiştirmeye çalışırken bir istisna oluşturan arayüz.

Uygulama:

Dosya adı: ImmutableListExample.java

 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ImmutableListExample { public static void main(String[] args) { // Create an immutable list using Collections.unmodifiableList List immutableList = Collections.unmodifiableList(new ArrayList(List.of('foo', 'bar', 'baz'))); // Attempt to modify the immutable List using various methods try { immutableList.add('qux'); System.out.println('Successfully added element to immutable list!'); } catch (UnsupportedOperationException e) { System.out.println('UnsupportedOperationException: ' + e.getMessage()); } try { immutableList.remove(0); System.out.println('Successfully removed element from immutable list!'); } catch (UnsupportedOperationException e) { System.out.println('UnsupportedOperationException: ' + e.getMessage()); } try { immutableList.set(0, 'qux'); System.out.println('Successfully modified element in immutable list!'); } catch (UnsupportedOperationException e) { System.out.println('UnsupportedOperationException: ' + e.getMessage()); } } } 

Çıktı:

 UnsupportedOperationException: null UnsupportedOperationException: null UnsupportedOperationException: null 

6. Collections.unmodifiableList()

Collections.unmodifiableList() Java Koleksiyonlar Çerçevesinde mevcut bir listenin değiştirilemez bir görünümünü oluşturan bir yöntemdir. Değiştirilemez Listeyi değiştirmeye çalışmanın UnsupportedOperationException oluşmasına yol açacağı sonucuna varılabilir. Orijinal Liste hâlâ değiştirilebilir ve herhangi bir değişiklik değiştirilemez Listeye yansıtılacaktır.

Program, değiştirilebilir bir listenin değiştirilemez bir temsilini oluşturmak için Collections.unmodifiableList() yönteminin nasıl kullanılacağını gösterir.

mylivecricket alternatifi

Çözümü bulma adımları aşağıda belirtilmiştir:

  1. Değiştirilebilir bir liste oluşturun değişkenListe ve ona bazı öğeler ekleyin. eklemek() yöntemi Dizi Listesi
  2. Değiştirilebilir listenin değiştirilemez bir görünümünü oluşturun değişkenListe kullanmak değiştirilemezList() yöntemini seçin ve onu değişkene atayın değiştirilemezListe .
  3. Değiştirilemez listeyi değiştirme girişimi değiştirilemezListe kullanmak eklemek() Değiştirilemez Liste salt okunur olduğundan, bu bir DesteklenmeyenOperationException . Bu istisna yakalandıktan sonra konsola bir mesaj yazdırılır.
  4. Orijinal değiştirilebilir listeyi değiştirin değişkenListe kullanarak başka bir öğe ekleyerek eklemek()
  5. Değiştirilemez Listenin orijinal değişebilir Listede yapılan değişiklikleri yansıttığını göstermek için hem değiştirilebilir hem de değiştirilemez listeleri konsola yazdırın.

Dosya adı: DeğiştirilemezListÖrnek.java

 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class UnmodifiableListExample { public static void main(String[] args) { List mutableList = new ArrayList(); mutableList.add('apple'); mutableList.add('banana'); mutableList.add('orange'); // Create an unmodifiable view of the mutableList List unmodifiableList = Collections.unmodifiableList(mutableList); // Attempt to modify the unmodifiableList will throw UnsupportedOperationException try { unmodifiableList.add('pear'); } catch (UnsupportedOperationException e) { System.out.println('Attempt to modify unmodifiableList failed: ' + e.getMessage()); } // The original mutableList can still be modified mutableList.add('pear'); // The unmodifiableList will reflect the changes made to the original mutableList System.out.println('mutableList: ' + mutableList); // [apple, banana, orange, pear] System.out.println('unmodifiableList: ' + unmodifiableList); // [apple, banana, orange, pear] } } 

Çıktı:

 Attempt to modify unmodifiableList failed: null mutableList: [apple, banana, orange, pear] unmodifiableList: [apple, banana, orange, pear] 

ImmutableList'in Avantajları

ImmutableList'in aşağıdakiler de dahil olmak üzere çeşitli avantajları vardır:

    İplik güvenliği:ImmutableList değişmez olduğundan doğası gereği iş parçacığı açısından güvenlidir. Birden fazla iş parçacığı, herhangi bir iş parçacığı girişimi veya bellek tutarsızlığı riski olmadan aynı Listeye erişebilir.Güvenlik:Değiştirilemez listeler güvenlik açıklarına daha az eğilimlidir. Örneğin, bir saldırgan Listeyi öğe ekleyerek veya çıkararak değiştirmeye çalışırsa, Liste değişmez olduğundan bunu yapamaz.Verim:Değişmez listeler salt okunur olduğundan, daha iyi performans için önbelleğe alınabilirler. Bir listeye birden çok kez erişilmesi gerekiyorsa, her seferinde yeni bir liste oluşturmak yerine değişmez bir liste kullanmak, ek yükün önlenmesine yardımcı olabilir.Tahmin edilebilirlik:Değişmez listeler değiştirilemediğinden davranışları tahmin edilebilir. Değişmez listeler kullanmanın bazı faydaları, savunma amaçlı programlama ihtiyacını ortadan kaldırmak ve kod hakkında akıl yürütmeyi kolaylaştırmaktır.Kodlamayı basitleştirir:Değişmez listeler senkronizasyon, savunma amaçlı kopyalama ve hataya açık manuel bellek yönetimi ihtiyacını ortadan kaldırarak kodlamayı basitleştirir. Bu yaklaşımın sonucu, bakımı daha kolay ve daha temiz bir görünüme sahip koddur.Testi kolaylaştırır:Değişmez listelerin içerikleri değişmediğinden test edilmesi daha kolaydır. Bu yaklaşım, olası tüm senaryoları ve uç durumları kapsayan testlerin yazılmasını kolaylaştırır.