logo

Nemainīgs saraksts Java

Java valodā nemainīgs saraksts ir saraksts, kuru nevar mainīt pēc tā izveides. Mēģinājums pievienot, noņemt vai modificēt saraksta elementus pēc tā izveides radīs izņēmumu.

Galvenais ieguvums, izmantojot nemainīgus sarakstus, ir tas, ka tie nodrošina pavedienu drošību un padara kodu izturīgāku. Tā kā sarakstu pēc tā izveides nevar modificēt, nepastāv risks, ka vairāki pavedieni mēģinās to modificēt vienlaikus un radīt problēmas. Turklāt nemainīgus sarakstus var viegli koplietot starp dažādām programmas daļām, nebaidoties, ka tie tiks netīši pārveidoti.

Kopumā Java nemaināmu sarakstu izmantošana var uzlabot programmas drošību un noturību, jo īpaši daudzpavedienu vidēs, kur koplietojamas datu struktūras var radīt problēmas.

Klases deklarācija

Java valodā, Nemainīgs saraksts klase ir daļa no Gvajava bibliotēka, kas nodrošina vairākas nemainīgas kolekcijas nodarbības. Izmantot Nemainīgs saraksts , mēs vispirms importējam com.google.common.collect iepakojums, kurā ir Nemainīgs saraksts klasē.

mīlošs krikets

Klases deklarācija Nemainīgs saraksts ir šāds:

 public abstract class ImmutableList extends ImmutableCollection implements List 

Nemainīgs saraksts paplašina ImmutableCollection klasē un īsteno Saraksts saskarne. Tā ir vispārīga klase, kas nozīmē, ka mēs varam izveidot Nemainīgs saraksts jebkura veida datu. The UN deklarācijā apzīmē tipa parametru, kuru varam aizstāt ar jebkuru klases vai interfeisa nosaukumu.

Klases hierarhija

The Nemainīgs saraksts klase īsteno Saraksts saskarne un ir saraksts, kuru pēc izveides nevar mainīt.

Klases hierarhija Nemainīgs saraksts ir šāds:

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

Šeit, ImmutableCollection ir abstrakta klase, kas nodrošina skeleta ieviešanu ImmutableCollection interfeiss, kas Nemainīgs saraksts pagarina.

Kopumā Nemainīgs saraksts klase nodrošina ērtu un efektīvu veidu, kā izveidot un izmantot nemainīgus sarakstus Java.

Notiek ImmutableList izveide

Ir dažādi veidi, kā Java izveidot ImmutableList atkarībā no izmantotās Java versijas un pieejamām bibliotēkām. Šeit ir daži piemēri:

1. Java 9 of() metodes izmantošana:

Java 9 ieviesa jaunu metodi ar nosaukumu of() saraksta saskarnē, kas veido nemainīgus sarakstus kodolīgāk un lasāmāk. Metode of() ir rūpnīcas metode, kas izmanto mainīgu argumentu skaitu un atgriež nemainīgu sarakstu ar šiem elementiem. To var izmantot ar jebkuru klasi, kas ievieš List interfeisu, tostarp ArrayList, LinkedList un ImmutableList. Viena no of() metodes izmantošanas priekšrocībām ir tā, ka tā ir daudz kodolīgāka un nodrošina kompilēšanas laika drošību, veicot argumentu tipa secinājumus, nodrošinot, ka sarakstam tiek pievienoti tikai pareizā tipa objekti. Kopumā of() metode vienkāršo nemaināmu sarakstu izveidi Java.

Tālāk ir norādītas darbības, lai atrastu risinājumu.

  1. Importējiet klasi List no pakotnes Java.util: kas ļauj programmai izmantot saskarni List, lai izveidotu un apstrādātu objektu sarakstus.
  2. Izveidojiet nemainīgu sarakstu, izmantojot Java 9 rūpnīcas metodi: kods izmanto metodi List.of(), lai izveidotu nemainīgu virkņu sarakstu ar četriem elementiem.
  3. Mēģinājums modificēt sarakstu: programma mēģina pievienot elementu nemainīgajam sarakstam, izmantojot metodi add(), kas nav atļauta nemaināmos sarakstos. Rezultātā programma uztver UnsupportedOperationException izņēmumu, ko izmet add() metode, un izdrukā ziņojumu, kas norāda, ka sarakstu nevar mainīt.

Faila nosaukums: 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.'); } } } 

Izvade:

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

2. Izmantojot ImmutableList.Builder klasi no Guava bibliotēkas:

Elementu pievienošana sarakstam plūstošā stilā, padarot to ērtu pakāpeniska saraksta izveidei.

Neatkarīgi no izmantotās metodes iegūtajam ImmutableList var piekļūt un to atkārtot tāpat kā jebkuru citu sarakstu, taču tā saturu nevar mainīt.

Šeit ir norādītā koda pakāpeniskais risinājums:

java atgriešanas masīvs
  1. Importējiet nepieciešamās klases: importējiet saskarni List un ImmutableList no pakotnes com.google.common.collect.
  2. Izveidojiet nemainīgu sarakstu, izmantojot veidotāju: izveidojiet nemainīgu sarakstu, izmantojot ImmutableList veidotāju. Izmantojiet metodi add(), lai sarakstam pievienotu elementus, un izsauciet metodi build(), lai izveidotu nemainīgu sarakstu.
  3. Izveidojiet nemainīgu sarakstu no esoša saraksta: izveidojiet saraksta objektu ar vajadzīgajiem elementiem. Pēc tam izsauciet metodi ImmutableList.copyOf(), nododot sarakstu kā parametru, lai izveidotu nemainīgu sarakstu.
  4. Vairāk elementu pievienošana: izmantojiet ImmutableList veidotāju, lai pievienotu citus elementus, izmantojot metodi addAll(), un izsauciet metodi build(), lai izveidotu nemainīgu sarakstu.
  5. Drukāt sarakstus: izmantojiet metodi System.out.println(), lai drukātu nemainīgo sarakstu saturu.

Īstenošana:

Faila nosaukums: 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); } } 

Izvade:

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

3. Izmantojot ImmutableList klases metodi of().

Guavas bibliotēkas ImmutableList klases metode of() ļauj izveidot nemainīgu sarakstu ar noteiktu elementu skaitu. Kad saraksts ir izveidots, jūs nevarat pievienot, noņemt vai modificēt tā elementus.

Faila nosaukums: ImmutableListExample.java

konvertēt virkni int 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); } } 

Izvade:

 Fruits: [apple, banana, orange, grape] 

4. Izmantojot copyOf() metodi

Java programmā copyOf() metode izveido jaunu masīvu, kas kopē esošu masīvu ar noteiktu garumu. Metode izmanto divus argumentus: kopējamo masīvu un jaunā masīva garumu.

Faila nosaukums: 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); } } 

Izvade:

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

5. UnsupportedOperationException

Programma ilustrē nemainīga saraksta izveidi Java, izmantojot metodi Collections.unmodifiableList. Turklāt tajā ir parādīts, kā rīkoties ar UnsupportedOperationException izņēmumu, kas tiek parādīts, mēģinot modificēt sarakstu.

Tālāk ir norādītas darbības, lai atrastu risinājumu:

  1. Pirmkārt, mēs izveidojam mainīgu ArrayList satur dažus sākotnējos elementus, izmantojot no metodi, kas atgriež nemainīgu sarakstu. Pēc tam mēs to nokārtojam ArrayList uz Collections.unmodifiableList metodi, kas atgriež nemainīgu saraksta skatu.
  2. Mēs cenšamies modificēt nemainīgo sarakstu, izmantojot pievienot, noņemt , un komplekts Tā kā saraksts ir nemainīgs, mēģinot to mainīt, tiks parādīts ziņojums UnsupportedOperationException .
  3. Mēs noķeram UnsupportedOperationException kas tiek izmests, un izdrukājiet ziņojumu konsolei, norādot, kura darbība tika mēģināta un bija neveiksmīga.

Ņemiet vērā, ka Collections.unmodifiableList metode rada tikai nemainīgu sākotnējā saraksta skatu. Nemainīgais skats atspoguļos šīs izmaiņas, ja tiks mainīts sākotnējais saraksts. Lai izveidotu patiesi nemainīgu sarakstu, ko nevar mainīt nekādā veidā, varat izmantot pielāgotu ieviešanu Saraksts saskarne, kas rada izņēmumu, mēģinot modificēt sarakstu.

virknes konvertēšana uz int java

Īstenošana:

Faila nosaukums: 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()); } } } 

Izvade:

 UnsupportedOperationException: null UnsupportedOperationException: null UnsupportedOperationException: null 

6. Collections.unmodifiableList()

Collections.unmodifiableList() ir Java kolekciju ietvara metode, kas izveido esoša saraksta nemodificējamu skatu. Var secināt, ka, mēģinot modificēt nemodificējamo sarakstu, tiks parādīts izņēmums UnsupportedOperationException. Sākotnējo sarakstu joprojām var mainīt, un visas izmaiņas tiks atspoguļotas nemodificētajā sarakstā.

Programma parāda, kā izmantot metodi Collections.unmodifiableList(), lai ģenerētu nemodificētu mainīga saraksta attēlojumu.

Tālāk ir norādītas darbības, lai atrastu risinājumu:

  1. Izveidojiet mainīgu sarakstu mainīgaisList un pievienojiet tam dažus elementus, izmantojot pievienot () metode ArrayList
  2. Izveidojiet nemodificētu mainīgā saraksta skatu mainīgaisList izmantojot unmodifiableList() metodi un piešķiriet to mainīgajam unmodifiableList .
  3. Mēģiniet modificēt nemodificējamo sarakstu unmodifiableList izmantojot pievienot () Tā kā nemodificējamais saraksts ir tikai lasāms, tiks parādīts UnsupportedOperationException . Pēc šī izņēmuma uztveršanas konsolē tiek izdrukāts ziņojums.
  4. Mainiet sākotnējo mainīgo sarakstu mainīgaisList pievienojot citu elementu, izmantojot pievienot ()
  5. Izdrukājiet konsolē gan maināmos, gan nemodificētos sarakstus, lai parādītu, ka nemodificējamais saraksts atspoguļo izmaiņas, kas veiktas sākotnējā mainīgajā sarakstā.

Faila nosaukums: 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] } } 

Izvade:

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

ImmutableList priekšrocības

ImmutableList ir vairākas priekšrocības, tostarp:

    Pavedienu drošība:Tā kā ImmutableList ir nemainīgs, tas pēc savas būtības ir pavedienu drošs. Vairāki pavedieni var piekļūt vienam un tam pašam sarakstam bez pavedienu traucējumu vai atmiņas nekonsekvences riska.Drošība:Nemainīgi saraksti ir mazāk pakļauti drošības ievainojamībām. Piemēram, ja uzbrucējs mēģina modificēt sarakstu, pievienojot vai noņemot elementus, viņš to nevar izdarīt, jo saraksts ir nemainīgs.Veiktspēja:Tā kā nemainīgie saraksti ir tikai lasāmi, tos var saglabāt kešatmiņā, lai nodrošinātu labāku veiktspēju. Ja sarakstam ir jāpiekļūst vairākas reizes, izmantojot nemainīgu sarakstu, nevis katru reizi izveidojot jaunu sarakstu, var izvairīties no papildu izmaksām.Paredzamība:Tā kā nemainīgus sarakstus nevar mainīt, to uzvedība ir paredzama. Dažas priekšrocības, ko sniedz nemainīgu sarakstu izmantošana, novērš nepieciešamību pēc aizsardzības programmēšanas un atvieglo koda apsvēršanu.Vienkāršo kodēšanu:Nemainīgi saraksti vienkāršo kodēšanu, novēršot nepieciešamību pēc sinhronizācijas, aizsardzības kopēšanas un ar kļūdām pakļautas manuālas atmiņas pārvaldības. Šīs pieejas rezultāts ir kods, kuru ir vieglāk uzturēt un kam ir tīrāks izskats.Atvieglo testēšanu:Nemainīgus sarakstus ir vieglāk pārbaudīt, jo to saturs nemainās. Šī pieeja atvieglo testu rakstīšanu, kas aptver visus iespējamos scenārijus un malas gadījumus.