Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo:breviare:breviar-07 [2025/11/17 13:00]
george.tudor1906
poo:breviare:breviar-07 [2025/11/17 13:39] (current)
george.tudor1906
Line 64: Line 64:
 == 1.2 Liste (List) == == 1.2 Liste (List) ==
  
-Interfața **List**, pe lângă metodele moștenite din `Collection`, definește colecții:+Interfața **List**, pe lângă metodele moștenite din //Collection//, definește colecții ​**ordonate** și **indexate**,​ care **permit duplicate** și ale căror elemente pot fi accesate după **poziție** (index). În practică, cele mai folosite implementări sunt **ArrayList** și **LinkedList**. ​
  
-* **ordonate** și **indexate**;​ +ArrayList oferă **acces aleator ​foarte ​rapid** ​la elementecu cost mai mare pentru ​inserări/​ștergeri în interiorul listeiLinkedList ​stochează elementele într-o ​listă înlănțuită, ceea ce face **inserările și ștergerile** ​locale mai eficiente (folosind iteratorul), dar accesul ​la un element "din mijloc" este mai lent. LinkedList ​implementează și Deque, astfel că poate lucra comod cu elementele de la ambele capete ​(ex. addFirst, addLast). Pentru stivă/​coadă se preferă ArrayDeque, iar pentru liste obișnuite ArrayList/​LinkedList.
-* care **permit duplicate**;​ +
-* ale căror elemente pot fi accesate după **poziție** (index). +
- +
-Cele mai folosite implementări:​ +
- +
-* **ArrayList** – vector dinamic; ​acces aleator ​**rapid**, inserări/​ștergeri în interiorul listei ​mai costisitoare;​ +
-* **LinkedList** – listă înlănțuităinserări/ștergeri ​locale mai eficiente (cu iterator), acces mai lent la elementele ​din mijloc”; implementează și `Deque` (operare ​la ambele capete). +
- +
-Pentru ​comportament de **stivă/​coadă** se preferă ​azi `ArrayDeque`, iar pentru liste obișnuite ​`ArrayList`/`LinkedList`.+
  
 <code java> <code java>
Line 81: Line 72:
  
 class Liste { class Liste {
-private final List<​String>​ list1 = new ArrayList<>​(); ​       // ordonată, acces aleator rapid +    ​private final List<​String>​ list1 = new ArrayList<>​(); ​       // ordonată, acces aleator rapid 
-private final LinkedList<​Integer>​ list2 = new LinkedList<>​();​ // listă + deque+    private final LinkedList<​Integer>​ list2 = new LinkedList<>​();​ // listă + deque
  
-``` +    ​public static void main(String[] args) { 
-public static void main(String[] args) { +        Liste obj = new Liste();
-    Liste obj = new Liste();+
  
-    ​// Operații de bază pe ArrayList<​String>​ +        ​// Operații de bază pe ArrayList<​String>​ 
-    obj.list1.add("​Lab POO"​);​ +        obj.list1.add("​Lab POO"​);​ 
-    obj.list1.add("​Colectii"​);​ +        obj.list1.add("​Colectii"​);​ 
-    obj.list1.add("​Structuri de date"​);​ +        obj.list1.add("​Structuri de date"​);​ 
-    if (obj.list1.contains("​Colectii"​)) { +        if (obj.list1.contains("​Colectii"​)) { 
-        System.out.println("​Lista contine cuvantul"​);​ +            System.out.println("​Lista contine cuvantul"​);​ 
-    }+        }
  
-    ​// Parcurgere și ștergere în siguranță (fără ConcurrentModificationException) +        ​// Parcurgere și ștergere în siguranță (fără ConcurrentModificationException) 
-    Iterator<​String>​ it = obj.list1.iterator();​ +        Iterator<​String>​ it = obj.list1.iterator();​ 
-    while (it.hasNext()) { +        while (it.hasNext()) { 
-        String s = it.next();​ +            String s = it.next();​ 
-        System.out.println(s);​ +            System.out.println(s);​ 
-        it.remove();​ // șterge elementul tocmai citit +            it.remove();​ // șterge elementul tocmai citit 
-    }+        }
  
-    ​// LinkedList<​Integer>​ ca listă + deque (ambele capete) +        ​// LinkedList<​Integer>​ ca listă + deque (ambele capete) 
-    obj.list2.addAll(Arrays.asList(1,​ 10, 20)); +        obj.list2.addAll(Arrays.asList(1,​ 10, 20)); 
-    obj.list2.addFirst(50);​ // capătul din stânga +        obj.list2.addFirst(50);​ // capătul din stânga 
-    obj.list2.addLast(17); ​ // capătul din dreapta+        obj.list2.addLast(17); ​ // capătul din dreapta
  
-    ​// Modificare „pe loc” cu ListIterator (ex.: înmulțește numerele pare cu 10) +        ​// Modificare „pe loc” cu ListIterator (ex.: înmulțește numerele pare cu 10) 
-    ListIterator<​Integer>​ li = obj.list2.listIterator();​ +        ListIterator<​Integer>​ li = obj.list2.listIterator();​ 
-    while (li.hasNext()) { +        while (li.hasNext()) { 
-        int x = li.next();​ +            int x = li.next();​ 
-        if (x % 2 == 0) li.set(x * 10); +            if (x % 2 == 0) li.set(x * 10); 
-    }+        }
  
-    ​// Afișare elemente (for-each) +        ​// Afișare elemente (for-each) 
-    for (Integer i : obj.list2) { +        for (Integer i : obj.list2) { 
-        System.out.println(i);​+            System.out.println(i); 
 +        } 
 + 
 +        // Sortare naturală (echivalent cu Collections.sort(list2)) 
 +        obj.list2.sort(Comparator.naturalOrder());​ 
 +        System.out.println(obj.list2);
     }     }
- 
-    // Sortare naturală (echivalent cu Collections.sort(list2)) 
-    obj.list2.sort(Comparator.naturalOrder());​ 
-    System.out.println(obj.list2);​ 
 } }
-``` +</​code>​
- +
-</​code>​+
  
 <note tip> <note tip>
-* Declarați mereu tipul elementelor: ​`List<​String>​``List<​Integer>​`.   +  ​* Declarați mereu tipul elementelor: ​//List<​String>​////List<​Integer>​//.   
-* Pentru eliminări în timpul parcurgerii folosiți ​`Iterator.remove()sau `removeIf(...)`.   +  * Pentru eliminări în timpul parcurgerii folosiți ​//Iterator.remove()// sau //removeIf(...)//.   
-* Alegeți **ArrayList** când accentul este pe citire după index și **LinkedList** când aveți inserări/​ștergeri locale cu iteratorul sau operații la ambele capete.+  * Alegeți **ArrayList** când accentul este pe citire după index și **LinkedList** când aveți inserări/​ștergeri locale cu iteratorul sau operații la ambele capete.
 </​note>  ​ </​note>  ​
  
poo/breviare/breviar-07.txt · Last modified: 2025/11/17 13:39 by george.tudor1906
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0