logo

Nespremenljiv seznam v Javi

V Javi je nespremenljiv seznam seznam, ki ga ni mogoče spreminjati, ko je ustvarjen. Poskus dodajanja, odstranjevanja ali spreminjanja elementov na seznamu, potem ko je ta ustvarjen, povzroči izjemo.

Glavna prednost uporabe nespremenljivih seznamov je, da zagotavljajo varnost niti in naredijo kodo bolj robustno. Ker seznama ni mogoče spreminjati, potem ko je ustvarjen, ni nevarnosti, da bi ga več niti poskušalo spremeniti hkrati in povzročilo težave. Poleg tega lahko nespremenljive sezname enostavno delite med različnimi deli programa brez strahu pred nenamerno spremembo.

Na splošno lahko uporaba nespremenljivih seznamov v Javi izboljša varnost in robustnost programa, zlasti v večnitnih okoljih, kjer lahko strukture podatkov v skupni rabi povzročajo težave.

sort arraylist java

Izjava razreda

V Javi je ImmutableList razred je del Guava knjižnica, ki ponuja več nespremenljivih razredov zbirk. Uporabiti ImmutableList , najprej uvozimo com.google.common.collect paket, ki vsebuje ImmutableList razred.

Izjava razreda ImmutableList kot sledi:

 public abstract class ImmutableList extends ImmutableCollection implements List 

ImmutableList podaljšuje ImmutableCollection razreda in izvaja Seznam vmesnik. Je generični razred, kar pomeni, da lahko ustvarimo ImmutableList katerega koli podatkovnega tipa. The IN v deklaraciji predstavlja tipski parameter, ki ga lahko nadomestimo s poljubnim imenom razreda ali vmesnika.

Hierarhija razreda

The ImmutableList razred izvaja Seznam vmesnik in predstavlja seznam, ki ga po ustvarjenem ni več mogoče spreminjati.

Razredna hierarhija ImmutableList kot sledi:

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

tukaj, ImmutableCollection je abstraktni razred, ki zagotavlja skeletno implementacijo ImmutableCollection vmesnik, ki ImmutableList se razteza.

Na splošno je ImmutableList ponuja priročen in učinkovit način za ustvarjanje in uporabo nespremenljivih seznamov v Javi.

Ustvarjanje ImmutableList

Obstajajo različni načini za ustvarjanje seznama ImmutableList v Javi, odvisno od različice Jave, ki jo uporabljate, in knjižnic, ki jih imate na voljo. Tukaj je nekaj primerov:

1. Z uporabo metode Java 9 of():

Java 9 je predstavila novo metodo, imenovano of(), v vmesniku List, ki ustvarja nespremenljive sezname bolj jedrnato in berljivo. Metoda of() je tovarniška metoda, ki sprejme spremenljivo število argumentov in vrne nespremenljiv seznam, ki vsebuje te elemente. Uporablja se lahko s katerim koli razredom, ki implementira vmesnik List, vključno z ArrayList, LinkedList in ImmutableList. Ena od prednosti uporabe metode of() je, da je veliko bolj jedrnata in zagotavlja varnost v času prevajanja z izvajanjem tipskega sklepanja na argumentih, kar zagotavlja, da so na seznam dodani samo objekti pravilnega tipa. Na splošno metoda of() poenostavlja ustvarjanje nespremenljivih seznamov v Javi.

Spodaj so navedeni koraki za iskanje rešitve.

odstranite angular cli
  1. Uvozite razred List iz paketa Java.util: ki programu omogoča uporabo vmesnika List za ustvarjanje in upravljanje seznamov predmetov.
  2. Ustvarite nespremenljiv seznam s tovarniško metodo Java 9: ​​Koda uporablja metodo List.of() za ustvarjanje nespremenljivega seznama nizov s štirimi elementi.
  3. Poskus spreminjanja seznama: Program poskuša dodati element na nespremenljiv seznam z uporabo metode add(), ki ni dovoljena na nespremenljivih seznamih. Posledično program ujame izjemo UnsupportedOperationException, ki jo vrže metoda add(), in natisne sporočilo, ki nakazuje, da seznama ni mogoče spremeniti.

Ime datoteke: 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.'); } } } 

Izhod:

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

2. Uporaba razreda ImmutableList.Builder iz knjižnice Guava:

Dodajanje elementov na seznam v tekočem slogu, zaradi česar je priročno za postopno ustvarjanje seznama.

Ne glede na uporabljeno metodo lahko do nastalega seznama ImmutableList dostopate in ga ponavljate kot kateri koli drug seznam, vendar njegove vsebine ni mogoče spreminjati.

Tukaj je postopna rešitev za dano kodo:

  1. Uvozite zahtevane razrede: uvozite vmesnik List in razred ImmutableList iz paketa com.google.common.collect.
  2. Ustvarite nespremenljiv seznam z graditeljem: Ustvarite nespremenljiv seznam z graditeljem ImmutableList. Uporabite metodo add(), da dodate elemente na seznam, in pokličite metodo build(), da ustvarite nespremenljiv seznam.
  3. Ustvarite nespremenljiv seznam iz obstoječega seznama: ustvarite objekt List z želenimi elementi. Nato pokličite metodo ImmutableList.copyOf() in posredujte seznam kot parameter, da ustvarite nespremenljiv seznam.
  4. Dodajanje več elementov: z graditeljem ImmutableList dodajte več elementov z metodo addAll() in pokličite metodo build(), da ustvarite nespremenljiv seznam.
  5. Natisnite sezname: uporabite metodo System.out.println(), da natisnete vsebino nespremenljivih seznamov.

Izvedba:

Ime datoteke: 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); } } 

Izhod:

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

3. Z uporabo metode of() razreda ImmutableList

Metoda of() razreda ImmutableList v knjižnici Guava omogoča ustvarjanje nespremenljivega seznama s fiksnim številom elementov. Ko je seznam ustvarjen, ne morete dodajati, odstranjevati ali spreminjati njegovih elementov.

Ime datoteke: 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); } } 

Izhod:

 Fruits: [apple, banana, orange, grape] 

4. Z uporabo metode copyOf().

V Javi metoda copyOf() ustvari novo matriko, ki kopira obstoječo matriko z določeno dolžino. Metoda sprejme dva argumenta: matriko, ki jo želite kopirati, in dolžino nove matrike.

Ime datoteke: ImmutableListExample.java

shloka mehta izobraževanje
 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); } } 

Izhod:

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

5. UnsupportedOperationException

Program ponazarja ustvarjanje nespremenljivega seznama v Javi z uporabo metode Collections.unmodifiableList. Poleg tega prikazuje, kako ravnati z izjemo UnsupportedOperationException, ki se pojavi pri poskusu spreminjanja seznama.

Spodaj so navedeni koraki za iskanje rešitve:

  1. Najprej ustvarimo spremenljivo ArrayList ki vsebuje nekaj začetnih elementov z uporabo od metoda, ki vrne nespremenljiv seznam. Nato prenesemo to ArrayList do Collections.unmodifiableList metoda, ki vrne nespremenljiv pogled seznama.
  2. Nespremenljivi seznam poskušamo spremeniti z uporabo dodati, odstraniti , in set Ker je seznam nespremenljiv, bo poskus njegovega spreminjanja vrgel UnsupportedOperationException .
  3. Ujamemo UnsupportedOperationException ki je vržen in natisne sporočilo na konzolo, ki označuje, katera operacija je bila poskusna in je bila neuspešna.

Upoštevajte, da je Collections.unmodifiableList metoda ustvari samo nespremenljiv pogled izvirnega seznama. Nespremenljivi pogled bo odražal te spremembe, če je prvotni seznam spremenjen. Če želite ustvariti resnično nespremenljiv seznam, ki ga ni mogoče spreminjati na noben način, lahko uporabite izvedbo po meri Seznam vmesnik, ki sproži izjemo, ko poskuša spremeniti seznam.

protokoli plasti podatkovne povezave

Izvedba:

Ime datoteke: 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()); } } } 

Izhod:

 UnsupportedOperationException: null UnsupportedOperationException: null UnsupportedOperationException: null 

6. Zbirke.unmodifiableList()

Collections.unmodifiableList() je metoda v okviru Java Collections Framework, ki ustvari nespremenljiv pogled obstoječega seznama. Lahko sklepamo, da bo poskus spreminjanja nespremenljivega seznama vodil do pojava UnsupportedOperationException. Izvirni seznam je še vedno mogoče spreminjati, vse spremembe pa se bodo odražale v nespremenljivem seznamu.

Program prikazuje, kako uporabiti metodo Collections.unmodifiableList() za ustvarjanje nespremenljive predstavitve spremenljivega seznama.

Spodaj so navedeni koraki za iskanje rešitve:

  1. Ustvari spremenljiv seznam mutableList in ji dodajte nekaj elementov z uporabo dodaj() metoda ArrayList
  2. Ustvarite nespremenljiv pogled spremenljivega seznama mutableList uporabljati unmodifiableList() metodo in jo dodelite spremenljivki unmodifiableList .
  3. Poskusi spremeniti nespremenljiv seznam unmodifiableList uporabljati dodaj() Ker je nespremenljiv seznam samo za branje, bo to vrglo UnsupportedOperationException . Ko ujame to izjemo, se na konzolo natisne sporočilo.
  4. Spremenite prvotni spremenljivi seznam mutableList z dodajanjem drugega elementa z uporabo dodaj()
  5. Natisnite spremenljive in nespremenljive sezname v konzolo, da pokažete, da nespremenljivi seznam odraža spremembe izvirnega spremenljivega seznama.

Ime datoteke: UnmodifiableListExample.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] } } 

Izhod:

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

Prednosti ImmutableList

ImutableList ima več prednosti, vključno z:

    Varnost niti:Ker je ImmutableList nespremenljiv, je sam po sebi varen za niti. Več niti lahko dostopa do istega seznama brez kakršnega koli tveganja motenj niti ali nedoslednosti pomnilnika.Varnost:Nespremenljivi seznami so manj dovzetni za varnostne ranljivosti. Če napadalec na primer poskuša spremeniti seznam z dodajanjem ali odstranjevanjem elementov, tega ne more storiti, saj je seznam nespremenljiv.Izvedba:Ker so nespremenljivi seznami samo za branje, jih je mogoče predpomniti za boljše delovanje. Če je treba do seznama dostopati večkrat, se lahko z uporabo nespremenljivega seznama namesto vsakokratnega ustvarjanja novega seznama izognete dodatnim stroškom.Predvidljivost:Ker nespremenljivih seznamov ni mogoče spreminjati, je njihovo vedenje predvidljivo. Nekatere prednosti uporabe nespremenljivih seznamov so odprava potrebe po obrambnem programiranju in olajšanje razmišljanja o kodi.Poenostavlja kodiranje:Nespremenljivi seznami poenostavijo kodiranje z odpravo potrebe po sinhronizaciji, obrambnem kopiranju in ročnem upravljanju pomnilnika, ki je nagnjeno k napakam. Rezultat tega pristopa je koda, ki jo je lažje vzdrževati in ima čistejši videz.Olajša testiranje:Nespremenljive sezname je lažje testirati, saj se njihova vsebina ne spreminja. Pristop olajša pisanje testov, ki pokrivajo vse možne scenarije in robne primere.