logo

Kolekcie v Jave

  1. Java Collection Framework
  2. Hierarchy of Collection Framework
  3. Rozhranie zberu
  4. Rozhranie iterátora

The Zbierka v Jave je rámec, ktorý poskytuje architektúru na ukladanie a manipuláciu so skupinou objektov.

Kolekcie Java môžu vykonávať všetky operácie, ktoré vykonávate s údajmi, ako je vyhľadávanie, triedenie, vkladanie, manipulácia a mazanie.

Java Collection znamená jednu jednotku objektov. Framework Java Collection poskytuje mnoho rozhraní (Set, List, Queue, Deque) a tried ( ArrayList , Vektor, LinkedList , PriorityQueue , HashSet, LinkedHashSet, TreeSet).

Čo je kolekcia v jazyku Java

Zbierka predstavuje jednu jednotku objektov, t.j. skupinu.

Čo je to framework v Jave

  • Poskytuje hotovú architektúru.
  • Predstavuje súbor tried a rozhraní.
  • Je to voliteľné.

Čo je kolekcia framework

Framework Collection predstavuje jednotnú architektúru na ukladanie a manipuláciu so skupinou objektov. Má:

  1. Rozhrania a jeho implementácie, t.j. triedy
  2. Algoritmus

Vieš?
  • Aké sú dva spôsoby iterácie prvkov kolekcie?
  • Aký je rozdiel medzi triedami ArrayList a LinkedList v rámci kolekcie?
  • Aký je rozdiel medzi triedami ArrayList a Vector v rámci kolekcie?
  • Aký je rozdiel medzi triedami HashSet a HashMap v rámci kolekcie?
  • Aký je rozdiel medzi triedou HashMap a Hashtable?
  • Aký je rozdiel medzi rozhraním Iterator a Enumeration v rámci kolekcie?
  • Ako môžeme triediť prvky objektu? Aký je rozdiel medzi porovnateľným a porovnávacím rozhraním?
  • Čo znamená metóda hashcode()?
  • Aký je rozdiel medzi kolekciou Java a kolekciami Java?

Hierarchy of Collection Framework

Pozrime sa na hierarchiu rámca kolekcie. The java.util balenie obsahuje všetko triedy a rozhrania pre rámec kolekcie.

Hierarchia rámca Java Collection

Metódy zberného rozhrania

Existuje mnoho metód deklarovaných v rozhraní kolekcie. Sú nasledovné:

NieMetódaPopis
1verejné boolovské pridanie (E e)Používa sa na vloženie prvku do tejto kolekcie.
2public boolean addAll(kolekcia c)Používa sa na vloženie špecifikovaných prvkov kolekcie do vyvolávanej kolekcie.
3verejné boolovské odstránenie (prvok Object)Používa sa na odstránenie prvku z kolekcie.
4public boolean removeAll(kolekcia c)Používa sa na vymazanie všetkých prvkov zadanej kolekcie z vyvolávajúcej kolekcie.
5predvolená boolovská hodnota removeIf (predikátový filter)Používa sa na vymazanie všetkých prvkov kolekcie, ktoré spĺňajú zadaný predikát.
6public boolean keepAll(kolekcia c)Používa sa na vymazanie všetkých prvkov vyvolávajúcej kolekcie okrem zadanej kolekcie.
7public int size()Vráti celkový počet prvkov v kolekcii.
8public void clear()Odstráni celkový počet prvkov z kolekcie.
9public boolean obsahuje(prvok Object)Používa sa na vyhľadávanie prvku.
10public boolean obsahuje všetko (kolekcia c)Používa sa na vyhľadávanie zadanej kolekcie v kolekcii.
jedenásťpublic Iterator iterator()Vracia iterátor.
12public Object[] toArray()Prevádza kolekciu na pole.
13verejné T[] toArray(T[] a)Prevádza kolekciu na pole. Tu je typ runtime vráteného poľa typ zadaného poľa.
14public boolean isEmpty()Kontroluje, či je zbierka prázdna.
pätnásťpredvolený stream ParalelStream()Vracia možno paralelný prúd s kolekciou ako zdrojom.
16predvolený stream stream()Vracia sekvenčný prúd s kolekciou ako zdrojom.
17predvolený spliterator spliterator()Vygeneruje Spliterator nad špecifikovanými prvkami v kolekcii.
18verejný boolovský rovná sa (prvok objektu)Zodpovedá dvom kolekciám.
19public int hashCode()Vráti číslo hash kódu kolekcie.

Rozhranie iterátora

Rozhranie iterátora poskytuje možnosť iterácie prvkov iba smerom dopredu.

Metódy rozhrania Iterator

V rozhraní Iterator sú len tri metódy. Oni sú:

NieMetódaPopis
1public boolean hasNext()Ak má iterátor viac prvkov, vráti hodnotu true, inak vráti hodnotu false.
2public Object next()Vráti prvok a presunie kurzor kurzora na ďalší prvok.
3public void remove()Odstráni posledné prvky vrátené iterátorom. Používa sa menej.

Iterovateľné rozhranie

Rozhranie Iterable je koreňové rozhranie pre všetky triedy kolekcií. Rozhranie Collection rozširuje rozhranie Iterable, a preto všetky podtriedy rozhrania Collection tiež implementujú rozhranie Iterable.

Obsahuje iba jednu abstraktnú metódu. t.j.

 Iterator iterator() 

Vracia iterátor nad prvkami typu T.

abstraktná trieda v jazyku Java

Rozhranie kolekcie

Rozhranie kolekcie je rozhranie, ktoré implementujú všetky triedy v rámci kolekcie. Deklaruje metódy, ktoré bude mať každá kolekcia. Inými slovami, môžeme povedať, že rozhranie kolekcie stavia základ, na ktorom závisí rámec kolekcie.

Niektoré z metód rozhrania Collection sú Boolean add ( Object obj), Boolean addAll ( Collection c), void clear () atď., ktoré sú implementované všetkými podtriedami rozhrania Collection.


Rozhranie zoznamu

Rozhranie zoznamu je potomkom rozhrania kolekcie. Blokuje dátovú štruktúru typu zoznam, do ktorej môžeme uložiť usporiadanú kolekciu objektov. Môže mať duplicitné hodnoty.

Rozhranie zoznamu je implementované triedami ArrayList, LinkedList, Vector a Stack.

Na vytvorenie inštancie rozhrania zoznamu musíme použiť:

 List list1= new ArrayList(); List list2 = new LinkedList(); List list3 = new Vector(); List list4 = new Stack(); 

V rozhraní zoznamu sú rôzne metódy, ktoré možno použiť na vkladanie, mazanie a prístup k prvkom zo zoznamu.

Triedy, ktoré implementujú rozhranie List, sú uvedené nižšie.


ArrayList

Trieda ArrayList implementuje rozhranie List. Používa dynamické pole na ukladanie duplicitných prvkov rôznych typov údajov. Trieda ArrayList zachováva poradie vkladania a nie je synchronizovaná. K prvkom uloženým v triede ArrayList je možné pristupovať náhodne. Zvážte nasledujúci príklad.

 import java.util.*; class TestJavaCollection1{ public static void main(String args[]){ ArrayList list=new ArrayList();//Creating arraylist list.add('Ravi');//Adding object in arraylist list.add('Vijay'); list.add('Ravi'); list.add('Ajay'); //Traversing list through Iterator Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Výkon:

 Ravi Vijay Ravi Ajay 

LinkedList

LinkedList implementuje rozhranie kolekcie. Na ukladanie prvkov používa interne dvojito prepojený zoznam. Môže ukladať duplicitné prvky. Zachováva poradie vloženia a nie je synchronizovaná. V LinkedList je manipulácia rýchla, pretože nie je potrebné žiadne posúvanie.

Zvážte nasledujúci príklad.

 import java.util.*; public class TestJavaCollection2{ public static void main(String args[]){ LinkedList al=new LinkedList(); al.add('Ravi'); al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); Iterator itr=al.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Výkon:

 Ravi Vijay Ravi Ajay 

Vektor

Vector používa dynamické pole na ukladanie dátových prvkov. Je to podobné ako ArrayList. Je však synchronizovaný a obsahuje mnoho metód, ktoré nie sú súčasťou kolekcie.

Zvážte nasledujúci príklad.

 import java.util.*; public class TestJavaCollection3{ public static void main(String args[]){ Vector v=new Vector(); v.add('Ayush'); v.add('Amit'); v.add('Ashish'); v.add('Garima'); Iterator itr=v.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Výkon:

 Ayush Amit Ashish Garima 

Stoh

Zásobník je podtriedou Vector. Implementuje dátovú štruktúru last-in-first-out, t.j. zásobník. Zásobník obsahuje všetky metódy triedy Vector a poskytuje aj jej metódy ako boolean push(), boolean peek(), boolean push(object o), ktoré definujú jej vlastnosti.

Zvážte nasledujúci príklad.

 import java.util.*; public class TestJavaCollection4{ public static void main(String args[]){ Stack stack = new Stack(); stack.push('Ayush'); stack.push('Garvit'); stack.push('Amit'); stack.push('Ashish'); stack.push('Garima'); stack.pop(); Iterator itr=stack.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Výkon:

 Ayush Garvit Amit Ashish 

Rozhranie fronty

Rozhranie frontu udržiava poradie „prvý dnu, prvý von“. Môže byť definovaný ako usporiadaný zoznam, ktorý sa používa na uchovávanie prvkov, ktoré sa majú spracovať. Existujú rôzne triedy ako PriorityQueue, Deque a ArrayDeque, ktoré implementujú rozhranie Queue.

Rozhranie fronty môže byť vytvorené ako:

 Queue q1 = new PriorityQueue(); Queue q2 = new ArrayDeque(); 

Existujú rôzne triedy, ktoré implementujú rozhranie Queue, niektoré z nich sú uvedené nižšie.


PriorityQueue

Trieda PriorityQueue implementuje rozhranie Queue. Obsahuje prvky alebo objekty, ktoré sa majú spracovať podľa ich priorít. PriorityQueue neumožňuje ukladanie hodnôt null do frontu.

Zvážte nasledujúci príklad.

 import java.util.*; public class TestJavaCollection5{ public static void main(String args[]){ PriorityQueue queue=new PriorityQueue(); queue.add('Amit Sharma'); queue.add('Vijay Raj'); queue.add('JaiShankar'); queue.add('Raj'); System.out.println('head:'+queue.element()); System.out.println('head:'+queue.peek()); System.out.println('iterating the queue elements:'); Iterator itr=queue.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } queue.remove(); queue.poll(); System.out.println('after removing two elements:'); Iterator itr2=queue.iterator(); while(itr2.hasNext()){ System.out.println(itr2.next()); } } } 

Výkon:

 head:Amit Sharma head:Amit Sharma iterating the queue elements: Amit Sharma Raj JaiShankar Vijay Raj after removing two elements: Raj Vijay Raj 

A rozhranie

Rozhranie Deque rozširuje rozhranie Queue. V Deque môžeme odstrániť a pridať prvky z oboch strán. Deque znamená obojstranný front, ktorý nám umožňuje vykonávať operácie na oboch koncoch.

Deque je možné vytvoriť ako:

 Deque d = new ArrayDeque(); 

ArrayDeque

Trieda ArrayDeque implementuje rozhranie Deque. Uľahčuje nám to používanie Deque. Na rozdiel od fronty môžeme pridávať alebo odstraňovať prvky z oboch koncov.

ArrayDeque je rýchlejší ako ArrayList a Stack a nemá žiadne obmedzenia kapacity.

Zvážte nasledujúci príklad.

 import java.util.*; public class TestJavaCollection6{ public static void main(String[] args) { //Creating Deque and adding elements Deque deque = new ArrayDeque(); deque.add('Gautam'); deque.add('Karan'); deque.add('Ajay'); //Traversing elements for (String str : deque) { System.out.println(str); } } } 

Výkon:

 Gautam Karan Ajay 

Nastaviť rozhranie

Set Interface v jazyku Java je prítomný v balíku java.util. Rozširuje rozhranie kolekcie. Predstavuje neusporiadanú množinu prvkov, ktorá nám neumožňuje ukladať duplicitné položky. V množine môžeme uložiť najviac jednu nulovú hodnotu. Sada je implementovaná pomocou HashSet, LinkedHashSet a TreeSet.

Set je možné vytvoriť ako:

 Set s1 = new HashSet(); Set s2 = new LinkedHashSet(); Set s3 = new TreeSet(); 

HashSet

Trieda HashSet implementuje rozhranie Set Interface. Predstavuje kolekciu, ktorá používa na ukladanie hašovaciu tabuľku. Hašovanie sa používa na ukladanie prvkov do HashSet. Obsahuje unikátne položky.

Zvážte nasledujúci príklad.

 import java.util.*; public class TestJavaCollection7{ public static void main(String args[]){ //Creating HashSet and adding elements HashSet set=new HashSet(); set.add('Ravi'); set.add('Vijay'); set.add('Ravi'); set.add('Ajay'); //Traversing elements Iterator itr=set.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Výkon:

 Vijay Ravi Ajay 

LinkedHashSet

Trieda LinkedHashSet predstavuje implementáciu LinkedList rozhrania Set Interface. Rozširuje triedu HashSet a implementuje rozhranie Set. Rovnako ako HashSet obsahuje aj jedinečné prvky. Zachováva poradie vloženia a povoľuje nulové prvky.

Zvážte nasledujúci príklad.

 import java.util.*; public class TestJavaCollection8{ public static void main(String args[]){ LinkedHashSet set=new LinkedHashSet(); set.add('Ravi'); set.add('Vijay'); set.add('Ravi'); set.add('Ajay'); Iterator itr=set.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Výkon:

 Ravi Vijay Ajay 

Rozhranie SortedSet

SortedSet je alternatívou rozhrania Set, ktoré poskytuje celkové usporiadanie svojich prvkov. Prvky SortedSet sú usporiadané vo vzostupnom (vzostupnom) poradí. SortedSet poskytuje ďalšie metódy, ktoré inhibujú prirodzené usporiadanie prvkov.

SortedSet možno vytvoriť ako:

 SortedSet set = new TreeSet(); 

TreeSet

Trieda Java TreeSet implementuje rozhranie Set, ktoré používa strom na ukladanie. Rovnako ako HashSet, aj TreeSet obsahuje jedinečné prvky. Čas prístupu a načítania TreeSet je však pomerne rýchly. Prvky v TreeSet uložené vo vzostupnom poradí.

Zvážte nasledujúci príklad:

 import java.util.*; public class TestJavaCollection9{ public static void main(String args[]){ //Creating and adding elements TreeSet set=new TreeSet(); set.add('Ravi'); set.add('Vijay'); set.add('Ravi'); set.add('Ajay'); //traversing elements Iterator itr=set.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Výkon:

 Ajay Ravi Vijay 
Čo sa naučíme v Java Collections Framework
  1. Trieda ArrayList
  2. Trieda LinkedList
  3. Rozhranie zoznamu
  4. Trieda HashSet
  5. Trieda LinkedHashSet
  6. Trieda TreeSet
  7. Trieda PriorityQueue
  8. Mapové rozhranie
  9. Trieda HashMap
  10. Trieda LinkedHashMap
  11. Trieda TreeMap
  12. Hashtable trieda
  13. Triedenie
  14. Porovnateľné rozhranie
  15. Rozhranie komparátora
  16. Trieda vlastností v jazyku Java