logo

Kolekcje w Javie

  1. Struktura kolekcji Java
  2. Hierarchia ram kolekcji
  3. Interfejs kolekcji
  4. Interfejs iteratora

The Kolekcja w Javie to framework zapewniający architekturę do przechowywania i manipulowania grupą obiektów.

Kolekcje Java umożliwiają realizację wszystkich operacji wykonywanych na danych, takich jak wyszukiwanie, sortowanie, wstawianie, manipulowanie i usuwanie.

Kolekcja Java oznacza pojedynczą jednostkę obiektów. Framework Java Collection udostępnia wiele interfejsów (Set, List, Queue, Deque) i klas ( Lista tablic , Wektor, Połączona lista , Kolejka priorytetowa , HashSet, LinkedHashSet, TreeSet).

Co to jest kolekcja w Javie

Kolekcja reprezentuje pojedynczą jednostkę obiektów, tj. grupę.

Co to jest framework w Javie

  • Dostarcza gotową architekturę.
  • Reprezentuje zestaw klas i interfejsów.
  • Jest to opcjonalne.

Co to jest framework kolekcji

Struktura kolekcji reprezentuje ujednoliconą architekturę do przechowywania grupy obiektów i manipulowania nią. To ma:

  1. Interfejsy i ich implementacje, czyli klasy
  2. Algorytm

Czy wiesz?
  • Jakie są dwa sposoby iteracji elementów kolekcji?
  • Jaka jest różnica między klasami ArrayList i LinkedList w środowisku kolekcji?
  • Jaka jest różnica między klasami ArrayList i Vector w środowisku kolekcji?
  • Jaka jest różnica między klasami HashSet i HashMap w środowisku kolekcji?
  • Jaka jest różnica między klasą HashMap a klasą Hashtable?
  • Jaka jest różnica między interfejsem Iteratora i wyliczenia w strukturze kolekcji?
  • Jak sortować elementy obiektu? Jaka jest różnica między interfejsem porównywalnym i komparatorem?
  • Do czego służy metoda hashcode()?
  • Jaka jest różnica między kolekcją Java a kolekcjami Java?

Hierarchia ram kolekcji

Przyjrzyjmy się hierarchii frameworku Collection. The java.util pakiet zawiera wszystko zajęcia I interfejsy dla frameworka Collection.

Hierarchia frameworku kolekcji Java

Metody interfejsu kolekcji

W interfejsie Collection zadeklarowano wiele metod. Są one następujące:

NIE.metodaOpis
1publiczna wartość logiczna add(E e)Służy do wstawiania elementu w tej kolekcji.
2publiczna wartość logiczna addAll (kolekcja c)Służy do wstawiania określonych elementów kolekcji do kolekcji wywołującej.
3publiczna wartość logiczna usuń (element obiektu)Służy do usunięcia elementu z kolekcji.
4publiczna wartość logiczna usuńAll (kolekcja c)Służy do usunięcia wszystkich elementów określonej kolekcji z kolekcji wywołującej.
5domyślna wartość logiczna usuńIf (filtr predykatów)Służy do usuwania wszystkich elementów kolekcji, które spełniają określony predykat.
6publiczna wartość logiczna zachowaj wszystko (kolekcja c)Służy do usuwania wszystkich elementów wywołującej kolekcji z wyjątkiem określonej kolekcji.
7publiczny rozmiar całkowity()Zwraca całkowitą liczbę elementów w kolekcji.
8publiczna pusta wyczyść()Usuwa całkowitą liczbę elementów z kolekcji.
9publiczna wartość logiczna zawiera (element obiektu)Służy do wyszukiwania elementu.
10publiczna wartość logiczna zawiera wszystko (kolekcja c)Służy do przeszukiwania określonej kolekcji w kolekcji.
jedenaściepubliczny iterator iterator()Zwraca iterator.
12obiekt publiczny [] toArray()Konwertuje kolekcję na tablicę.
13publiczny T[] toArray(T[] a)Konwertuje kolekcję na tablicę. W tym przypadku typem środowiska wykonawczego zwróconej tablicy jest typ określonej tablicy.
14publiczna wartość logiczna isEmpty()Sprawdza, czy kolekcja jest pusta.
piętnaściedomyślny strumień równoległy()Zwraca prawdopodobnie równoległy Stream, którego źródłem jest kolekcja.
16domyślny strumień strumienia()Zwraca sekwencyjny Stream z kolekcją jako źródłem.
17domyślny Spliterator spliter()Generuje Spliterator dla określonych elementów w kolekcji.
18publiczna wartość logiczna równa się (element obiektu)Pasuje do dwóch kolekcji.
19publiczny int hashCode()Zwraca numer kodu skrótu kolekcji.

Interfejs iteratora

Interfejs iteratora umożliwia iterację elementów tylko w kierunku do przodu.

Metody interfejsu Iteratora

W interfejsie Iteratora dostępne są tylko trzy metody. Oni są:

NIE.metodaOpis
1publiczna wartość logiczna hasNext()Zwraca wartość true, jeśli iterator ma więcej elementów, w przeciwnym razie zwraca wartość false.
2Obiekt publiczny następny()Zwraca element i przesuwa wskaźnik kursora do następnego elementu.
3publiczne unieważnienie usuń()Usuwa ostatnie elementy zwrócone przez iterator. Jest mniej używany.

Iterowalny interfejs

Interfejs Iterable jest interfejsem głównym dla wszystkich klas kolekcji. Interfejs Collection rozszerza interfejs Iterable i dlatego wszystkie podklasy interfejsu Collection również implementują interfejs Iterable.

Zawiera tylko jedną metodę abstrakcyjną. tj.,

 Iterator iterator() 

Zwraca iterator po elementach typu T.

tablica obiektów w Javie

Interfejs kolekcji

Interfejs kolekcji to interfejs implementowany przez wszystkie klasy w frameworku kolekcji. Deklaruje metody, które będzie miała każda kolekcja. Innymi słowy, możemy powiedzieć, że interfejs Kolekcji buduje fundament, na którym opiera się struktura kolekcji.

Niektóre z metod interfejsu Collection to Boolean add (Object obj), Boolean addAll (Collection c), void clear() itp., które są implementowane przez wszystkie podklasy interfejsu Collection.


Interfejs listy

Interfejs listy jest interfejsem podrzędnym interfejsu kolekcji. Blokuje strukturę danych typu listowego, w której możemy przechowywać uporządkowaną kolekcję obiektów. Może mieć zduplikowane wartości.

Interfejs listy jest implementowany przez klasy ArrayList, LinkedList, Vector i Stack.

Aby utworzyć instancję interfejsu List, musimy użyć:

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

W interfejsie List dostępne są różne metody umożliwiające wstawianie, usuwanie i uzyskiwanie dostępu do elementów listy.

Poniżej podano klasy implementujące interfejs List.


Lista tablic

Klasa ArrayList implementuje interfejs List. Wykorzystuje tablicę dynamiczną do przechowywania zduplikowanych elementów różnych typów danych. Klasa ArrayList zachowuje kolejność wstawiania i nie jest zsynchronizowana. Dostęp do elementów przechowywanych w klasie ArrayList można uzyskać losowo. Rozważ następujący przykład.

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

Wyjście:

 Ravi Vijay Ravi Ajay 

Połączona lista

LinkedList implementuje interfejs kolekcji. Używa wewnętrznie podwójnie połączonej listy do przechowywania elementów. Może przechowywać zduplikowane elementy. Zachowuje kolejność wstawiania i nie jest synchronizowana. W LinkedList manipulacja jest szybka, ponieważ nie jest wymagane żadne przesuwanie.

Rozważ następujący przykład.

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

Wyjście:

 Ravi Vijay Ravi Ajay 

Wektor

Vector używa tablicy dynamicznej do przechowywania elementów danych. Jest podobny do ArrayList. Jednakże jest zsynchronizowany i zawiera wiele metod, które nie są częścią frameworku Collection.

Rozważ następujący przykład.

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

Wyjście:

 Ayush Amit Ashish Garima 

Stos

Stos jest podklasą wektora. Implementuje strukturę danych „ostatnie weszło, pierwsze wyszło”, tj. Stack. Stos zawiera wszystkie metody klasy Vector, a także udostępnia jej metody, takie jak boolean push(), boolean peek(), boolean push(obiekt o), który definiuje jego właściwości.

Rozważ następujący przykład.

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

Wyjście:

 Ayush Garvit Amit Ashish 

Interfejs kolejki

Interfejs kolejki utrzymuje kolejność „pierwszy na wejściu, pierwszy na wyjściu”. Można ją zdefiniować jako uporządkowaną listę, która służy do przechowywania elementów, które mają zostać przetworzone. Istnieją różne klasy, takie jak PriorityQueue, Deque i ArrayDeque, które implementują interfejs kolejki.

Interfejs kolejki można utworzyć jako:

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

Istnieją różne klasy implementujące interfejs kolejki. Niektóre z nich podano poniżej.


Kolejka priorytetowa

Klasa PriorityQueue implementuje interfejs Queue. Zawiera elementy lub obiekty, które mają być przetwarzane według ich priorytetów. PriorityQueue nie pozwala na przechowywanie wartości null w kolejce.

Rozważ następujący przykład.

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

Wyjście:

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

I interfejs

Interfejs Deque rozszerza interfejs kolejki. W Deque możemy usuwać i dodawać elementy z obu stron. Deque oznacza kolejkę dwustronną, która umożliwia wykonywanie operacji na obu końcach.

Deque można utworzyć jako:

 Deque d = new ArrayDeque(); 

TablicaDeque

Klasa ArrayDeque implementuje interfejs Deque. Ułatwia nam to korzystanie z Deque. W przeciwieństwie do kolejki, możemy dodawać lub usuwać elementy z obu końców.

ArrayDeque jest szybszy niż ArrayList i Stack i nie ma ograniczeń pojemności.

Rozważ następujący przykład.

 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); } } } 

Wyjście:

 Gautam Karan Ajay 

Ustaw interfejs

Zestaw interfejsu w Javie znajduje się w pakiecie java.util. Rozszerza interfejs Kolekcji. Reprezentuje nieuporządkowany zbiór elementów, który nie pozwala nam przechowywać zduplikowanych elementów. W zestawie możemy przechowywać co najwyżej jedną wartość null. Zestaw jest implementowany przez HashSet, LinkedHashSet i TreeSet.

Zestaw może zostać utworzony jako:

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

Zestaw skrótów

Klasa HashSet implementuje interfejs Set. Reprezentuje kolekcję, która używa tabeli mieszającej do przechowywania. Hash służy do przechowywania elementów w HashSet. Zawiera unikalne przedmioty.

Rozważ następujący przykład.

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

Wyjście:

 Vijay Ravi Ajay 

Połączony zestaw Hash

Klasa LinkedHashSet reprezentuje implementację LinkedList interfejsu Set. Rozszerza klasę HashSet i implementuje interfejs Set. Podobnie jak HashSet, zawiera również unikalne elementy. Zachowuje kolejność wstawiania i dopuszcza elementy zerowe.

Rozważ następujący przykład.

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

Wyjście:

 Ravi Vijay Ajay 

Interfejs SortedSet

SortedSet to alternatywa dla interfejsu Set, która zapewnia całkowite uporządkowanie jego elementów. Elementy SortedSet są ułożone w kolejności rosnącej (rosnącej). SortedSet zapewnia dodatkowe metody, które utrudniają naturalne uporządkowanie elementów.

SortedSet można utworzyć jako:

 SortedSet set = new TreeSet(); 

Zestaw drzew

Klasa Java TreeSet implementuje interfejs Set, który wykorzystuje drzewo do przechowywania. Podobnie jak HashSet, TreeSet również zawiera unikalne elementy. Jednak czas dostępu i pobierania TreeSet jest dość szybki. Elementy w TreeSet przechowywane w kolejności rosnącej.

Rozważ następujący przykład:

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

Wyjście:

 Ajay Ravi Vijay 
Czego nauczymy się w Java Collections Framework
  1. Klasa ArrayList
  2. Klasa LinkedList
  3. Interfejs listy
  4. Klasa HashSet
  5. Klasa LinkedHashSet
  6. Klasa TreeSet
  7. Klasa PriorityQueue
  8. Interfejs mapy
  9. Klasa HashMap
  10. Klasa LinkedHashMap
  11. Klasa TreeMap
  12. Klasa Hashtable
  13. Sortowanie
  14. Porównywalny interfejs
  15. Interfejs komparatora
  16. Klasa właściwości w Javie