CodeGym /Blog Java /Random-PL /Kolekcje w Javie
John Squirrels
Poziom 41
San Francisco

Kolekcje w Javie

Opublikowano w grupie Random-PL

Co to jest kolekcja w Javie?

Kolekcja w Javie jest reprezentowana jako kontener, który grupuje wszystkie elementy w jedną jednostkę. Na przykład folder poczty (grupa e-maili), książka telefoniczna (mapowanie nazwisk na numery telefonów).

Co to jest rama?

Framework to podstawowy fundament lub układ, nad którym rozpoczynasz pracę, korzystając z różnych dostępnych klas i interfejsów. Na przykład Laravel jest jednym z najbardziej znanych frameworków PHP, który zapewnia podstawowy szkielet Twojej aplikacji.

Co to jest struktura kolekcji w Javie?

Wszystkie obiekty są zgrupowane w jeden obiekt wraz z architekturą reprezentującą różne metody manipulowania kolekcjami i udostępniającą je. Zatem framework Collections w Javie zapewnia różne struktury danych już zaimplementowane do przechowywania danych i metod, aby manipulować nimi za pomocą takich funkcji, jak sortowanie, wyszukiwanie, usuwanie i wstawianie . Na przykład chcesz wdrożyć system dla przypadkowej firmy, aby poprawić obsługę swoich klientów, w oparciu o zasadę „kto pierwszy, ten lepszy”. Nazywa się to również implementacją FIFO (pierwsze weszło, pierwsze wyszło). Teraz musimy zaimplementować tę strukturę danych, a następnie wykorzystać ją do osiągnięcia naszego celu. Framework Collections udostępnia nam interfejs Queue, który wystarczy zaimportować, a nie zaimplementować, a następnie użyć i gotowe. Implementacja : Możesz zaimportować wszystkie kolekcje, używając następującego wiersza:
import java.util.*;
Jeśli chcesz zaimportować konkretną kolekcję, użyj dokładnej nazwy pakietu, np.:
import java.util.LinkedList;

Korzyści ze środowiska kolekcji w Javie

Ma następujące zalety.
  1. Już wdrożone (oszczędność czasu).
  2. Wydajność Wydajność (szybkość i jakość).
  3. Zmniejsza wysiłek związany z nauką i używaniem nowych interfejsów API.

Jaka jest struktura hierarchii kolekcji?

Przyjrzyjmy się teraz hierarchii kolekcji, ale najpierw musimy poznać podstawowe komponenty tego frameworka.
  1. Interfejsy
  2. Zajęcia (implementacja)
  3. Algorytmy

Hierarchia ram kolekcji

Kolekcje w Javie - 1Dla Twojego zrozumienia:
  1. Kolekcja, Zestaw, Kolejka i Lista są interfejsami. Zestaw, Kolejka i Lista są rozszerzane przez interfejs Kolekcji.
  2. PriorityQueue, HashSet, LinkedList i Stack są klasami lub implementacją tych interfejsów.
  3. Nie jest obowiązkowe, aby klasa implementowała tylko jeden interfejs. LinkedList implementuje także na przykład interfejs Deque.

Rodzaje kolekcji

Struktura kolekcji Java zawiera wiele typów kolekcji, aby zmniejszyć nasze wysiłki. Oto lista niektórych kolekcji:
  1. Klasa ArrayList
  2. Klasa LinkedList
  3. Interfejs listy
  4. Ustaw interfejs
  5. Interfejs kolejki
  6. Interfejs mapy
  7. Klasa PriorityQueue
  8. Klasa HashMap
  9. Porównywalny interfejs
  10. Klasa LinkedHashMap
  11. Klasa TreeMap
  12. Tabela Hash

Interfejsy kolekcji

Tutaj omówimy niektóre typowe interfejsy kolekcji, a następnie niektóre metody implementowane przez klasy.

Interfejs kolekcji

Jest to podstawowa podstawa frameworka Collections, ponieważ zapewnia wszystkie niezbędne metody implementacji. Mapa jest jedyną strukturą danych, która jej nie implementuje, ale pozostałe implementują jej metody. Ten interfejs zawiera metody sprawdzania rozmiaru kolekcji oraz tego, czy obiekt istnieje w kolekcji, a także dodawania lub usuwania obiektów z kolekcji.

Iterowalny interfejs

Jest to interfejs główny frameworka Collections, ponieważ jest rozszerzony o interfejs Collection, który jest implementowany przez wszystkie klasy. Zwraca iterator dla określonej kolekcji, aby wykonać iterację po niej.

Interfejs kolejki

Kolejka służy do przechowywania elementów, ale nie można ich przetworzyć. Implementując podstawowe operacje zbierania, zapewnia także dodatkowe metody wstawiania i ekstrakcji.

Ustaw interfejs

Zestaw służy do przechowywania w nim unikalnych elementów. Nigdy nie zawiera zduplikowanych elementów i modeluje matematyczną abstrakcję zbiorów, aby reprezentować zbiory, takie jak procesy działające na maszynie.

Interfejs listy

Lista to uporządkowana kolekcja, czasami nazywana sekwencją, która może zawierać zduplikowane elementy. Zapewnia użytkownikowi kontrolę nad aktualizacją lub usunięciem określonego elementu, wstawiając element w określonym punkcie przy użyciu jego całkowitej wartości indeksu. LinkedList i ArrayList to klasy implementacyjne interfejsu List.

Interfejs Deque

Deque oznacza kolejkę dwustronną, co oznacza, że ​​możemy wykonywać operacje na obu końcach. Możemy wstawiać i usuwać elementy z obu końców. Interfejs Deque rozszerza interfejs kolejki. Zarówno ArrayDeque, jak i LinkedList implementują interfejs Deque. Zapewnia metody wstawiania, usuwania i sprawdzania instancji z obu stron.

Interfejs mapy

Interfejs mapy jest również częścią środowiska Kolekcji, ale nie rozszerza interfejsu Kolekcji. Służy do przechowywania par klucz-wartość. Jego głównymi implementacjami są HashMap, TreeMap i LinkesHashMap, które pod pewnymi względami są podobne do HashSet, TreeSet i LinkedHashSet. Zawsze zawiera unikalne klucze, ale wartości można powielić. Jest to przydatne, gdy trzeba dodać, usunąć lub wyszukać element na podstawie klucza. Zapewnia nam podstawowe metody, takie jak put , get , Remove , size , pusty i tak dalej.

Typowe metody tych interfejsów

Teraz przyjrzymy się niektórym typowym metodom przewidzianym do implementacji różnych klas w tym frameworku, z wyjątkiem interfejsu Map.
Metody Opis
publiczna wartość logiczna add(E e) Służy do wstawiania elementu do kolekcji
publiczna wartość logiczna usuń (element obiektu) Służy do usuwania elementu z kolekcji
publiczny rozmiar całkowity() Zwraca liczbę elementów w kolekcji
publiczna wartość logiczna zawiera (element obiektu) Służy do wyszukiwania elementu
publiczna wartość logiczna isEmpty() Sprawdza, czy kolekcja jest pusta
publiczna wartość logiczna równa się (element obiektu) Sprawdza równość

Zajęcia kolekcjonerskie

Jak wiemy, framework ma różne interfejsy, które są implementowane przez wiele klas w nim zawartych. Przyjrzyjmy się teraz niektórym powszechnie używanym klasom.

Połączona lista

Jest to najczęściej używana struktura danych, która implementuje podwójnie połączoną listę do przechowywania znajdujących się w niej elementów. Może przechowywać zduplikowane elementy. Implementuje interfejs Dequeue rozszerzony o interfejs Queue i interfejs List. Nie jest zsynchronizowany. Zobaczmy teraz, jak rozwiązać nasz problem omówiony powyżej (koncepcja FIFO) za pomocą LinkedList. Problem polega na obsłudze klientów w taki sposób, w jaki przyszli, czyli „ pierwszy weszli, pierwszy wyszli” .

Przykład

import java.util.*;

public class LinkedListExample {
    public static void main(String[] args) {
        Queue<String> customerQueue = new LinkedList<String>();
        //Adding customers to the Queue as they arrived
        customerQueue.add("John");
        customerQueue.add("Angelina");
        customerQueue.add("Brooke");
        customerQueue.add("Maxwell");

        System.out.println("Customers in Queue:"+customerQueue);
        //element() => returns head of the queue
        //we will see our first customer and serve him
        System.out.println("Head of the queue i.e first customer: "+customerQueue.element());
        //remove () method =>removes first element(customer) from the queue i.e the customer is served so remove him to see next
        System.out.println("Element removed from the queue: "+customerQueue.remove());
        //poll () => removes and returns the head
        System.out.println("Poll():Returned Head of the queue: "+customerQueue.poll());
        //print the remaining customers in the Queue
        System.out.println("Final Queue:"+customerQueue);
    }
}

Wyjście

Klienci w kolejce: [John, Angelina, Brooke, Maxwell] Szef kolejki, czyli pierwszy klient: John Element usunięty z kolejki: John Poll(): Zwrócony Szef kolejki: Angelina Ostatnia kolejka: [Brooke, Maxwell]

Lista tablic

Po prostu implementuje interfejs List. Zachowuje kolejność wstawiania i wykorzystuje tablicę dynamiczną do przechowywania elementów różnych typów danych. Elementy można powielać. Jest również niezsynchronizowany i może przechowywać wartości null. Przyjrzyjmy się teraz jego różnym metodom... Są one przydatne, gdy nie wiemy, ile rekordów lub elementów musimy wstawić. Weźmy przykład biblioteki, w której nie wiemy, ile książek musimy przechowywać. Zatem ilekroć mamy książkę, musimy wstawić ją do ArrayList.

Przykład

public class ArrayListExample {
	public static void main(String args[]) {

		// Creating the ArrayList
		ArrayList<String> books = new ArrayList<String>();

		// Adding a book to the list
		books.add("Absalom, Absalom!");
		// Adding a book in array list
		books.add("A Time to Kill");
		// Adding a book to the list
		books.add("The House of Mirth");
		// Adding a book to the list
		books.add("East of Eden");
		// Traversing the list through Iterator
		Iterator<String> itr = books.iterator();
		while (itr.hasNext()) {
			System.out.println(itr.next());
		}
	}
}

Wyjście

Absalomie, Absalomie! Czas zabić dom wesołości na wschód od Edenu

Zestaw skrótów

Implementuje interfejs Set i nigdy nie zawiera zduplikowanych wartości. Implementuje tablicę mieszającą do przechowywania wartości. Dopuszcza również wartości null. Nigdy nie utrzymuje kolejności wstawiania, ale zapewnia stałą wydajność w czasie dla metod add , usuwania , size i zawiera . Najlepiej nadaje się do operacji wyszukiwania i nie jest synchronizowany.

Przykład

import java.util.*;
class HashSetExample{
    public static void main(String args[]){
        //creating HashSet and adding elements to it
        HashSet<Integer> hashSet=new HashSet();
        hashSet.add(1);
        hashSet.add(5);
        hashSet.add(4);
        hashSet.add(3);
        hashSet.add(2);
        //getting an iterator for the collection
        Iterator<Integer> i=hashSet.iterator();
        //iterating over the value
        while(i.hasNext())  {
            System.out.println(i.next());
        }
    }
}

Wyjście

1 2 3 4 5
Jak widać, nie zachowuje kolejności wstawiania.

TablicaDeque

Implementuje interfejs Deque, dzięki czemu umożliwia operacje z obu końców. Nie pozwala na wartości null. Jest szybszy niż Stack i LinkedList, gdy jest zaimplementowany jako Stack i LinkedList. ArrayDeque nie ma ograniczeń co do rozmiaru, ponieważ rośnie i kurczy się zgodnie z wymaganiami. Jest niezsynchronizowany, co oznacza, że ​​nie jest bezpieczny dla wątków. Aby zachować bezpieczeństwo wątków, musimy zaimplementować zewnętrzną logikę.

Przykład

import java.util.*;
public class ArrayDequeExample {
   public static void main(String[] args) {
       //creating Deque and adding elements
       Deque<String> deque = new ArrayDeque<String>();
       //adding an element
       deque.add("One");
       //adding an element at the start
       deque.addFirst("Two");
       //adding an element at the end
       deque.addLast("Three");
       //traversing elements of the collection
       for (String str : deque) {
            System.out.println(str);
       }
   }
}

Wyjście

Dwa Raz Trzy

HashMapa

Jest to implementacja interfejsu Map wspieranego przez tablicę mieszającą. Przechowuje pary klucz-wartość. Nie pozwala na wartości null. Nie jest zsynchronizowany. Nigdy nie gwarantuje kolejności wstawiania. Zapewnia stałą wydajność w czasie dla metod takich jak get i put . Jego wydajność zależy od dwóch czynników — pojemności początkowej i współczynnika obciążenia . Pojemność to liczba segmentów w tabeli mieszającej, więc początkowa pojemność to liczba segmentów przydzielonych w momencie tworzenia. Współczynnik obciążenia jest miarą tego, jak bardzo tabela mieszająca może zostać zapełniona, zanim jej pojemność zostanie zwiększona. Metodę rehash stosuje się w celu zwiększenia pojemności i głównie podwaja liczbę wiader.

Przykład

import java.util.*;
public class HashMapExample{
    public static void main(String args[]){
        //creating a HashMap
        HashMap<Integer,String> map=new HashMap<Integer,String>();
        //putting elements into the map
        map.put(1,"England");
        map.put(2,"USA");
        map.put(3,"China");

        //get element at index 2
        System.out.println("Value at index 2 is: "+map.get(2));
        System.out.println("iterating map");
        //iterating the map
        for(Map.Entry m : map.entrySet()){
            System.out.println(m.getKey()+" "+m.getValue());
        }
    }
}

Wyjście

Wartość przy indeksie 2 to: Chiny, iteracja mapy 1 Anglia 2 USA 3 Chiny

Algorytmy

Framework Collections zapewnia nam różne algorytmy umożliwiające wykonanie różnych operacji na kolekcjach. Tutaj przyjrzymy się, które główne operacje są objęte tymi algorytmami. Zawiera algorytmy związane z:
  1. Sortowanie
  2. Badawczy
  3. Tasowanie
  4. Rutynowa manipulacja danymi
  5. Kompozycja
  6. Znalezienie wartości ekstremalnych
Dla lepszego zrozumienia omówimy algorytm sortowania.

Sortowanie

Algorytm sortowania zmienia kolejność listy zgodnie z zależnością porządkowania. Dostępne są dwie formy relacji.
  1. Naturalny porządek
  2. Zamawianie porównawcze

Naturalny porządek

W porządku naturalnym lista jest sortowana według jej elementów.

Zamawianie porównawcze

W tej formie zamówienia wraz z listą przekazywany jest dodatkowy parametr, jakim jest komparator. Do sortowania używany jest nieco zoptymalizowany algorytm sortowania przez scalanie, który jest szybki i stabilny, ponieważ gwarantuje czas wykonania n log(n) i nie zmienia kolejności równych elementów. Będziemy używać tego samego przykładu z ArrayList, aby zademonstrować sortowanie.

Przykład

import java.util.*;
public class SortingExample{
    public static void main(String args[]){
        //Creating arraylist
        ArrayList<String> books=new ArrayList<String>();
        //Adding a book to the arraylist
        books.add("A Time to Kill");
        //Adding a book to the arraylist
        books.add("Absalom, Absalom!");
        //Adding a book to the arraylist
        books.add("The House of Mirth");
        //Adding a book to the arraylist
        books.add("East of Eden");
        //Traversing list through Iterator before sorting
        Iterator itrBeforeSort=books.iterator();
        while(itrBeforeSort.hasNext()){
            System.out.println(itrBeforeSort.next());
        }
        //sorting the books
        Collections.sort(books);
        System.out.println("After sorting the books");
        //Traversing list through Iterator after sorting
        Iterator itr=books.iterator();
        while(itr.hasNext()){
            System.out.println(itr.next());
        }
    }
}

Wyjście

Czas zabić Absaloma, Absalomie! Dom radości na wschód od Edenu Po uporządkowaniu książek Czas zabić Absaloma, Absaloma! Na wschód od Edenu Dom Radości

Wniosek

Mamy nadzieję, że już rozumiesz, czym jest framework kolekcji Java, jakie są jego interfejsy i klasy oraz jak implementować różne klasy. Zawsze możesz użyć tego frameworka, aby zmniejszyć wysiłki w Javie. Możesz ćwiczyć i wracać tutaj, gdy będziesz potrzebować dodatkowej pomocy. Miłej nauki!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION