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.
- 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.
- 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.
- 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:
- 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.
- 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.
- 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.
- 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.
- 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:
- İ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.
- 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 .
- 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:
- Değiştirilebilir bir liste oluşturun değişkenListe ve ona bazı öğeler ekleyin. eklemek() yöntemi Dizi Listesi
- 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 .
- 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.
- Orijinal değiştirilebilir listeyi değiştirin değişkenListe kullanarak başka bir öğe ekleyerek eklemek()
- 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: