Rozhranie zoznamu v jazyku Java poskytuje spôsob, ako uložiť objednanú kolekciu. Je to detské rozhranie Zbierka . Je to usporiadaná kolekcia objektov, v ktorej môžu byť uložené duplicitné hodnoty. Keďže Zoznam zachováva poradie vkladania, umožňuje pozičný prístup a vkladanie prvkov.
Obsah
- Rozhranie zoznamu v jazyku Java
- Vyhlásenie o rozhraní zoznamu Java
- Príklad zoznamu Java
- Operácie v rozhraní zoznamu Java
- Zložitosť rozhrania zoznamu v Jave
- Iterácia cez rozhranie zoznamu v jazyku Java
- Metódy rozhrania zoznamu
- Java List vs. Set
Rozhranie zoznamu v jazyku Java
Rozhranie List sa nachádza v balíku java.util a zdedí rozhranie Collection. Je to továreň rozhrania ListIterator. Prostredníctvom ListIterator môžeme iterovať zoznam v smere dopredu a dozadu. Triedy implementácie rozhrania List sú ArrayList, LinkedList, Stack a Vector. ArrayList a LinkedList sú široko používané v programovaní Java. Trieda Vector je od Java 5 zastaraná.
List a ArrayList v Java Collection Framework
Vyhlásenie o rozhraní zoznamu Java
public interface List extends Collection ;>
Pozrime sa podrobnejšie na vytváranie objektov alebo inštancií v triede List. Od r Zoznam je rozhranie , nemožno vytvoriť objekty zo zoznamu typov. Vždy potrebujeme triedu, ktorá to implementuje Zoznam za účelom vytvorenia objektu. A tiež po zavedení Generiká v Java 1.5 je možné obmedziť typ objektu, ktorý je možné uložiť do zoznamu. Rovnako ako niekoľko iných používateľsky definovaných „rozhraní“ implementovaných používateľsky definovanými „triedami“, Zoznam je „rozhranie“, ktoré implementuje ArrayList trieda, preddefinovaná v java.util balík.
Syntax zoznamu Java
Tento typ bezpečného zoznamu možno definovať ako:
List list = new ArrayList ();>
Poznámka: Obj je typ objektu, ktorý sa má uložiť do zoznamu
Príklad zoznamu Java
Java
// Java program to Demonstrate List Interface> > // Importing all utility classes> import> java.util.*;> > // Main class> // ListDemo class> class> GFG {> > > // Main driver method> > public> static> void> main(String[] args)> > {> > > // Creating an object of List interface> > // implemented by the ArrayList class> > List l1 => new> ArrayList();> > > // Adding elements to object of List interface> > // Custom inputs> > > l1.add(> 0> ,> 1> );> > l1.add(> 1> ,> 2> );> > > // Print the elements inside the object> > System.out.println(l1);> > > // Now creating another object of the List> > // interface implemented ArrayList class> > // Declaring object of integer type> > List l2 => new> ArrayList();> > > // Again adding elements to object of List interface> > // Custom inputs> > l2.add(> 1> );> > l2.add(> 2> );> > l2.add(> 3> );> > > // Will add list l2 from 1 index> > l1.addAll(> 1> , l2);> > > System.out.println(l1);> > > // Removes element from index 1> > l1.remove(> 1> );> > > // Printing the updated List 1> > System.out.println(l1);> > > // Prints element at index 3 in list 1> > // using get() method> > System.out.println(l1.get(> 3> ));> > > // Replace 0th element with 5> > // in List 1> > l1.set(> 0> ,> 5> );> > > // Again printing the updated List 1> > System.out.println(l1);> > }> }> |
>
>Výkon
[1, 2] [1, 1, 2, 3, 2] [1, 2, 3, 2] 2 [5, 2, 3, 2]>
Teraz poďme vykonať rôzne operácie pomocou List Interface, aby sme tomu lepšie porozumeli. Budeme diskutovať o nasledujúcich operáciách uvedených nižšie a neskôr o ich implementácii prostredníctvom čistých kódov Java.
Operácie v rozhraní zoznamu Java
Keďže List je rozhranie, možno ho použiť iba s triedou, ktorá toto rozhranie implementuje. Teraz sa pozrime, ako vykonať niekoľko často používaných operácií v zozname.
- Operácia 1: Pridanie prvkov do triedy List pomocou metódy add().
- Operácia 2: Aktualizácia prvkov v triede List pomocou metódy set().
- Operácia 3: Vyhľadávanie prvkov pomocou metód indexOf(), lastIndexOf
- Operácia 4: Odstránenie prvkov pomocou metódy remove().
- Operácia 5: Prístup k prvkom v triede List pomocou metódy get().
- Operácia 6: Kontrola, či je prvok prítomný v triede List pomocou metódy obsahuje().
Teraz poďme diskutovať o operáciách jednotlivo a implementovať to isté do kódu, aby sme to lepšie pochopili.
1. Pridanie prvkov do triedy List pomocou metóda add().
Na pridanie prvku do zoznamu môžeme použiť pridať () metóda. Táto metóda je preťažená na vykonávanie viacerých operácií na základe rôznych parametrov.
Parametre: Vyžaduje 2 parametre, a to:
- pridať (Objekt): Táto metóda sa používa na pridanie prvku na koniec zoznamu.
- add(int index, Object): Táto metóda sa používa na pridanie prvku do špecifického indexu v zozname
Príklad:
Java
dedičnosť v c++
// Java Program to Add Elements to a List> > // Importing all utility classes> import> java.util.*;> > // Main class> class> GFG {> > > // Main driver method> > public> static> void> main(String args[])> > {> > // Creating an object of List interface,> > // implemented by ArrayList class> > List al => new> ArrayList();> > > // Adding elements to object of List interface> > // Custom elements> > al.add(> 'Geeks'> );> > al.add(> 'Geeks'> );> > al.add(> 1> ,> 'For'> );> > > // Print all the elements inside the> > // List interface object> > System.out.println(al);> > }> }> |
>
>Výkon
[Geeks, For, Geeks]>
2. Aktualizácia prvkov
Po pridaní prvkov, ak chceme prvok zmeniť, je možné to urobiť pomocou set() metóda. Keďže zoznam je indexovaný, na prvok, ktorý chceme zmeniť, sa odkazuje index prvku. Preto táto metóda berie index a aktualizovaný prvok, ktorý je potrebné vložiť do tohto indexu.
Príklad:
Java
// Java Program to Update Elements in a List> > // Importing utility classes> import> java.util.*;> > // Main class> class> GFG {> > > // Main driver method> > public> static> void> main(String args[])> > {> > // Creating an object of List interface> > List al => new> ArrayList();> > > // Adding elements to object of List class> > al.add(> 'Geeks'> );> > al.add(> 'Geeks'> );> > al.add(> 1> ,> 'Geeks'> );> > > // Display theinitial elements in List> > System.out.println(> 'Initial ArrayList '> + al);> > > // Setting (updating) element at 1st index> > // using set() method> > al.set(> 1> ,> 'For'> );> > > // Print and display the updated List> > System.out.println(> 'Updated ArrayList '> + al);> > }> }> |
>
>Výkon
Initial ArrayList [Geeks, Geeks, Geeks] Updated ArrayList [Geeks, For, Geeks]>
3. Hľadanie prvkov
Vyhľadávanie prvkov v rozhraní Zoznam je bežnou operáciou pri programovaní v jazyku Java. Rozhranie zoznamu poskytuje niekoľko metód na vyhľadávanie prvkov, ako napr indexOf() , lastIndexOf() metódy.
Metóda indexOf() vracia index prvého výskytu zadaného prvku v zozname, zatiaľ čo metóda lastIndexOf() vracia index posledného výskytu zadaného prvku.
Parametre:
- indexOf(prvku): Vráti index prvého výskytu zadaného prvku v zozname alebo -1, ak sa prvok nenájde
- lastIndexOf(element): Vráti index posledného výskytu zadaného prvku v zozname alebo -1, ak sa prvok nenájde
Príklad:
Java
import> java.util.ArrayList;> import> java.util.List;> > public> class> ListExample {> > public> static> void> main(String[] args)> > {> > // create a list of integers> > List numbers => new> ArrayList();> > > // add some integers to the list> > numbers.add(> 1> );> > numbers.add(> 2> );> > numbers.add(> 3> );> > numbers.add(> 2> );> > > // use indexOf() to find the first occurrence of an> > // element in the list> > int> index = numbers.indexOf(> 2> );> > System.out.println(> > 'The first occurrence of 2 is at index '> > + index);> > > // use lastIndexOf() to find the last occurrence of> > // an element in the list> > int> lastIndex = numbers.lastIndexOf(> 2> );> > System.out.println(> > 'The last occurrence of 2 is at index '> > + lastIndex);> > }> }> |
>
>Výkon
The first occurrence of 2 is at index 1 The last occurrence of 2 is at index 3>
4. Odstraňovanie prvkov
Na odstránenie prvku zo zoznamu môžeme použiť odstrániť () metóda. Táto metóda je preťažená na vykonávanie viacerých operácií na základe rôznych parametrov. Oni sú:
Parametre:
- odstrániť (Objekt): Táto metóda sa používa na jednoduché odstránenie objektu zo zoznamu. Ak existuje viacero takýchto objektov, potom sa prvý výskyt objektu odstráni.
- remove(int index): Keďže zoznam je indexovaný, táto metóda nadobudne celočíselnú hodnotu, ktorá jednoducho odstráni prvok prítomný v tomto konkrétnom indexe v zozname. Po odstránení prvku sa všetky prvky presunú doľava, aby vyplnili priestor a indexy objektov sa aktualizujú.
Príklad:
Java
java porovnateľná
// Java Program to Remove Elements from a List> > // Importing List and ArrayList classes> // from java.util package> import> java.util.ArrayList;> import> java.util.List;> > // Main class> class> GFG {> > > // Main driver method> > public> static> void> main(String args[])> > {> > > // Creating List class object> > List al => new> ArrayList();> > > // Adding elements to the object> > // Custom inputs> > al.add(> 'Geeks'> );> > al.add(> 'Geeks'> );> > > // Adding For at 1st indexes> > al.add(> 1> ,> 'For'> );> > > // Print the initialArrayList> > System.out.println(> 'Initial ArrayList '> + al);> > > // Now remove element from the above list> > // present at 1st index> > al.remove(> 1> );> > > // Print the List after removal of element> > System.out.println(> 'After the Index Removal '> + al);> > > // Now remove the current object from the updated> > // List> > al.remove(> 'Geeks'> );> > > // Finally print the updated List now> > System.out.println(> 'After the Object Removal '> > + al);> > }> }> |
>
>Výkon
Initial ArrayList [Geeks, For, Geeks] After the Index Removal [Geeks, Geeks] After the Object Removal [Geeks]>
5. Prístup k prvkom
Na prístup k prvku v zozname môžeme použiť dostať () metóda, ktorá vráti prvok na zadanom indexe
Parametre:
get(int index): Táto metóda vráti prvok na zadanom indexe v zozname.
Príklad:
Java
string java pole
// Java Program to Access Elements of a List> > // Importing all utility classes> import> java.util.*;> > // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String args[])> > {> > // Creating an object of List interface,> > // implemented by ArrayList class> > List al => new> ArrayList();> > > // Adding elements to object of List interface> > al.add(> 'Geeks'> );> > al.add(> 'For'> );> > al.add(> 'Geeks'> );> > > // Accessing elements using get() method> > String first = al.get(> 0> );> > String second = al.get(> 1> );> > String third = al.get(> 2> );> > > // Printing all the elements inside the> > // List interface object> > System.out.println(first);> > System.out.println(second);> > System.out.println(third);> > System.out.println(al);> > }> }> |
>
>Výkon
Geeks For Geeks [Geeks, For, Geeks]>
6. Kontrola, či je prvok prítomný v zozname
Aby sme skontrolovali, či je prvok prítomný v zozname, môžeme použiť obsahuje() metóda. Táto metóda vráti hodnotu true, ak je zadaný prvok prítomný v zozname, inak vráti hodnotu false.
Parametre:
obsahuje(Objekt): Táto metóda preberá jeden parameter, objekt, ktorý sa má skontrolovať, ak je prítomný v zozname.
Príklad:
Java
// Java Program to Check if an Element is Present in a List> > // Importing all utility classes> import> java.util.*;> > // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String args[])> > {> > // Creating an object of List interface,> > // implemented by ArrayList class> > List al => new> ArrayList();> > > // Adding elements to object of List interface> > al.add(> 'Geeks'> );> > al.add(> 'For'> );> > al.add(> 'Geeks'> );> > > // Checking if element is present using contains()> > // method> > boolean> isPresent = al.contains(> 'Geeks'> );> > > // Printing the result> > System.out.println(> 'Is Geeks present in the list? '> > + isPresent);> > }> }> |
>
>Výkon
Is Geeks present in the list? true>
Zložitosť rozhrania zoznamu v Jave
Prevádzka | Časová zložitosť | Priestorová zložitosť |
---|---|---|
Pridanie prvku do rozhrania zoznamu | O(1) | O(1) |
Odstrániť prvok z rozhrania zoznamu | O(N) | O(N) |
Nahradiť prvok v rozhraní zoznamu | O(N) | O(N) |
Rozhranie prechádzajúceho zoznamu | O(N) | O(N) |
Iterácia cez rozhranie zoznamu v jazyku Java
Doteraz máme veľmi malú veľkosť vstupu a operácie robíme manuálne pre každý subjekt. Teraz poďme diskutovať o rôznych spôsoboch, ako môžeme iterovať cez zoznam, aby sme ich prinútili pracovať pre väčšiu sadu vzoriek.
Metódy: Existuje niekoľko spôsobov, ako iterovať cez zoznam. Najznámejšie spôsoby sú pomocou základného pre slučku v kombinácii s a get() metóda získať prvok na konkrétnom indexe a pokročilé pre slučku .
Príklad:
Java
// Java program to Iterate the Elements> // in an ArrayList> > // Importing java utility classes> import> java.util.*;> > // Main class> public> class> GFG {> > > // main driver method> > public> static> void> main(String args[])> > {> > // Creating an empty Arraylist of string type> > List al => new> ArrayList();> > > // Adding elements to above object of ArrayList> > al.add(> 'Geeks'> );> > al.add(> 'Geeks'> );> > > // Adding element at specified position> > // inside list object> > al.add(> 1> ,> 'For'> );> > > // Using for loop for iteration> > for> (> int> i => 0> ; i // Using get() method to // access particular element System.out.print(al.get(i) + ' '); } // New line for better readability System.out.println(); // Using for-each loop for iteration for (String str : al) // Printing all the elements // which was inside object System.out.print(str + ' '); } }> |
>
huffmanov kódovací kód
>Výkon
Geeks For Geeks Geeks For Geeks>
Metódy rozhrania zoznamu
Keďže hlavný koncept rôznych typov zoznamov je rovnaký, rozhranie zoznamu obsahuje nasledujúce metódy:
Metóda | Popis |
---|---|
pridať(int index, prvok) | Táto metóda sa používa s rozhraním Java List Interface na pridanie prvku do konkrétneho indexu v zozname. Keď sa odovzdá jeden parameter, jednoducho pridá prvok na koniec zoznamu. |
addAll(int index, kolekcia kolekcie) | Táto metóda sa používa s rozhraním List v jazyku Java na pridanie všetkých prvkov v danej kolekcii do zoznamu. Po odovzdaní jedného parametra pridá všetky prvky danej kolekcie na koniec zoznamu. |
veľkosť () | Táto metóda sa používa s rozhraním Java List Interface na vrátenie veľkosti zoznamu. |
jasný() | Táto metóda sa používa na odstránenie všetkých prvkov v zozname. Odkaz na vytvorený zoznam je však stále uložený. |
odstrániť (int index) | Táto metóda odstráni prvok zo zadaného indexu. Posúva nasledujúce prvky (ak existujú) doľava a znižuje ich indexy o 1. |
odstrániť (prvok) | Táto metóda sa používa s rozhraním Java List Interface na odstránenie prvého výskytu daného prvku v zozname. |
získať (int index) | Táto metóda vráti prvky na zadanom indexe. |
set(int index, prvok) | Táto metóda nahrádza prvky v danom indexe novým prvkom. Táto funkcia vráti prvok, ktorý bol práve nahradený novým prvkom. |
indexOf(prvku) | Táto metóda vráti prvý výskyt daného prvku resp -1 ak prvok nie je prítomný v zozname. |
lastIndexOf(prvok) | Táto metóda vráti posledný výskyt daného prvku resp -1 ak sa prvok nenachádza v zozname. |
rovná sa (prvok) | Táto metóda sa používa s rozhraním Java List Interface na porovnanie rovnosti daného prvku s prvkami zoznamu. |
hashCode() | Táto metóda sa používa s rozhraním List v jazyku Java na vrátenie hodnoty hashcode daného zoznamu. |
je prázdny() | Táto metóda sa používa s rozhraním Java List Interface na kontrolu, či je zoznam prázdny alebo nie. Ak je zoznam prázdny, vráti hodnotu true, inak hodnotu false. |
obsahuje (prvok) | Táto metóda sa používa s rozhraním zoznamu v jazyku Java na kontrolu, či zoznam obsahuje daný prvok alebo nie. Ak zoznam obsahuje prvok, vráti hodnotu true. |
obsahuje všetko (kolekcia kolekcie) | Táto metóda sa používa s rozhraním Java List Interface na kontrolu, či zoznam obsahuje celú kolekciu prvkov. |
zoradiť (komparátor) | Táto metóda sa používa s rozhraním zoznamu v jazyku Java na triedenie prvkov zoznamu na základe daného komparátor . |
Java List vs. Set
Rozhranie zoznamu aj rozhranie Set dedia rozhranie kolekcie. Medzi nimi však existujú určité rozdiely.
Zoznam | Set |
---|---|
Zoznam je usporiadaná postupnosť. | Sada je neusporiadaná sekvencia. |
Zoznam umožňuje duplicitné prvky | Sada nepovoľuje duplicitné prvky. |
Prvky sú prístupné podľa ich polohy. | Prístup k prvkom nie je povolený. |
Je možné uložiť viacero nulových prvkov. | Element null možno uložiť iba raz. |
Implementácie zoznamov sú ArrayList, LinkedList, Vector, Stack | Implementácie sady sú HashSet, LinkedHashSet. |
Asociácia tried s rozhraním zoznamu Java
Teraz poďme diskutovať o triedach, ktoré implementujú rozhranie zoznamu, pre ktoré sa najprv pozrite na nižšie uvedené obrázkové znázornenie, aby ste lepšie porozumeli rozhraniu zoznamu. Je to nasledovné:
AbstractList , CopyOnWriteArrayList , a AbstractSequentialList sú triedy, ktoré implementujú rozhranie List. V každej zo spomínaných tried je implementovaná samostatná funkcionalita. Sú nasledovné:
- AbstractList: Táto trieda sa používa na implementáciu nemodifikovateľného zoznamu, pre ktorý je potrebné iba rozšíriť túto triedu AbstractList a implementovať iba dostať () a veľkosť () metódy.
- CopyOnWriteArrayList: Táto trieda implementuje rozhranie zoznamu. Ide o rozšírenú verziu ArrayList v ktorom sa všetky úpravy (pridať, nastaviť, odstrániť atď.) implementujú vytvorením novej kópie zoznamu.
- AbstractSequentialList: Táto trieda implementuje Rozhranie zberu a trieda AbstractCollection. Táto trieda sa používa na implementáciu nemodifikovateľného zoznamu, pre ktorý je potrebné iba rozšíriť túto triedu AbstractList a implementovať iba dostať () a veľkosť () metódy.
Budeme postupovať týmto spôsobom.
- ArrayList
- Vektor
- Stoh
- LinkedList
Poďme o nich postupne diskutovať a implementovať to isté, aby sme zistili, ako fungujú triedy s rozhraním Zoznam.
1. ArrayList
ArrayList trieda, ktorá je implementovaná v rámci kolekcie, nám poskytuje dynamické polia v jazyku Java. Aj keď môže byť pomalší ako štandardné polia, ale môže byť užitočný v programoch, kde je potrebné veľa manipulácie v poli. Pozrime sa, ako pomocou tejto triedy vytvoriť objekt zoznamu.
Príklad:
Java
// Java program to demonstrate the> // creation of list object using the> // ArrayList class> > import> java.io.*;> import> java.util.*;> > class> GFG {> > public> static> void> main(String[] args)> > {> > // Size of ArrayList> > int> n => 5> ;> > > // Declaring the List with initial size n> > List arrli => new> ArrayList(n);> > > // Appending the new elements> > // at the end of the list> > for> (> int> i => 1> ; i <= n; i++)> > arrli.add(i);> > > // Printing elements> > System.out.println(arrli);> > > // Remove element at index 3> > arrli.remove(> 3> );> > > // Displaying the list after deletion> > System.out.println(arrli);> > > // Printing elements one by one> > for> (> int> i => 0> ; i System.out.print(arrli.get(i) + ' '); } }> |
>
>Výkon
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
2. Vektor
Vektor je trieda, ktorá je implementovaná v rámci kolekcie a implementuje pestovateľné pole objektov. Vector implementuje dynamické pole, čo znamená, že môže rásť alebo zmenšovať podľa potreby. Podobne ako pole obsahuje komponenty, ku ktorým je možné pristupovať pomocou celočíselného indexu. Vektory v podstate patria do starších tried, ale teraz sú plne kompatibilné s kolekciami. Pozrime sa, ako pomocou tejto triedy vytvoriť objekt zoznamu.
Príklad:
Java
// Java program to demonstrate the> // creation of list object using the> // Vector class> > import> java.io.*;> import> java.util.*;> > class> GFG {> > public> static> void> main(String[] args)> > {> > // Size of the vector> > int> n => 5> ;> > > // Declaring the List with initial size n> > List v => new> Vector(n);> > > // Appending the new elements> > // at the end of the list> > for> (> int> i => 1> ; i <= n; i++)> > v.add(i);> > > // Printing elements> > System.out.println(v);> > > // Remove element at index 3> > v.remove(> 3> );> > > // Displaying the list after deletion> > System.out.println(v);> > > // Printing elements one by one> > for> (> int> i => 0> ; i System.out.print(v.get(i) + ' '); } }> |
>
>Výkon
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
3. Zásobník
Stack je trieda, ktorá je implementovaná v rámci kolekcie a rozširuje modely vektorových tried a implementuje Príklad:
Java
učiť selénPríklad:
Java
// Java program to demonstrate the> // creation of list object using the> // Stack class> > import> java.io.*;> import> java.util.*;> > class> GFG {> > public> static> void> main(String[] args)> > {> > // Size of the stack> > int> n => 5> ;> > > // Declaring the List> > List s => new> Stack();> > > // Appending the new elements> > // at the end of the list> > for> (> int> i => 1> ; i <= n; i++)> > s.add(i);> > > // Printing elements> > System.out.println(s);> > > // Remove element at index 3> > s.remove(> 3> );> > > // Displaying the list after deletion> > System.out.println(s);> > > // Printing elements one by one> > for> (> int> i => 0> ; i System.out.print(s.get(i) + ' '); } }> |
>
>Výkon
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
4. LinkedList
Príklad:
Java
LinkedList je trieda, ktorá je implementovaná v rámci kolekcie, ktorá vo svojej podstate implementuje Príklad:Java
Príklad:Java
// Java program to demonstrate the> // creation of list object using the> // LinkedList class> > import> java.io.*;> import> java.util.*;> > class> GFG {> > public> static> void> main(String[] args)> > {> > // Size of the LinkedList> > int> n => 5> ;> > > // Declaring the List with initial size n> > List ll => new> LinkedList();> > > // Appending the new elements> > // at the end of the list> > for> (> int> i => 1> ; i <= n; i++)> > ll.add(i);> > > // Printing elements> > System.out.println(ll);> > > // Remove element at index 3> > ll.remove(> 3> );> > > // Displaying the list after deletion> > System.out.println(ll);> > > // Printing elements one by one> > for> (> int> i => 0> ; i System.out.print(ll.get(i) + ' '); } }> |
>
>Výkon
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>