Kolekcje - pakiet Java Collections Framework

Podobne dokumenty
Kolekcje - pakiet Java Collections Framework

Programowanie w języku Java. Kolekcje

Kolekcje mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Programowanie Obiektowe (Java)

Kolekcje. Na podstawie:

Kolekcja (kontener) to po prostu obiekt, który grupuje wiele elementów w jeden twór.

Dawid Gierszewski Adam Hanasko

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

java.util.* :Kolekcje Tomasz Borzyszkowski

Java niezbędnik programisty spotkanie nr 8. Kolekcje c.d.

Programowanie obiektowe

Java Collections Framework

Programowanie w Javie- wykład 11 Kolekcje (listy)

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Język JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język Java część 2 (przykładowa aplikacja)

Kurs programowania. Wykład 9. Wojciech Macyna

Tworzenie aplikacji w języku Java

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Podstawy otwartych języków programowania Przechowywanie danych

Programowanie i projektowanie obiektowe

Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego Łódź. Java podstawy języka, wykład 4 1

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Język Java część 2 (przykładowa aplikacja)

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

jlabel: void setalignment(label.center/left/right) - wyrównanie String gettext() pobiera aktualny tekst napisu void settext(string text) ustawia

Definiowanie własnych klas

KOLEKCJE JAVY API: NAJPROSTSZE PODSTAWY

Lista, Stos, Kolejka, Tablica Asocjacyjna

Programowanie i struktury danych

Java SE Laboratorium nr 7. Temat: Kolekcje

Kolekcje. object that groups multiple elements into a single unit

Kolekcje w Javie cz. 1

Definiowanie własnych klas

Wykład 4. Klasa List Kolejki Stosy Słowniki

Wykład 4: Klasy i Metody

Języki i metody programowania Java INF302W Wykład 3 (część 2)

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Platformy Programistyczne Podstawy języka Java

Algorytmy i Struktury Danych. Anna Paszyńska

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Comparable<Klasa_uzytkownika>

GUI - projektowanie interfejsów cz. II

Kolekcje obiektów. Wyj tki.

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Kompozycja i dziedziczenie klas

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),


Dokumentacja do API Javy.

import java.util.*; public class ListExample { public static void main(string args[]) { List<String> lista1= new ArrayList<String> ();

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Wykład 7: Pakiety i Interfejsy

Programowanie obiektowe

Programowanie obiektowe

STL: Lekcja 1&2. Filozofia STL

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Programowanie obiektowe

Programowanie obiektowe i język Java

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Polimorfizm. dr Jarosław Skaruz

Java: interfejsy i klasy wewnętrzne

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Język Java wątki (streszczenie)

Diagram stanów Laboratorium 9

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Języki i metody programowania Java Lab4 podejście obiektowe, zastosowanie pojemników

Szablony funkcji i szablony klas

Klasy abstrakcyjne, interfejsy i polimorfizm

Kolekcje w języku Java

Multimedia JAVA. Historia

Klasy i obiekty cz II

Programowanie obiektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

STL Standardt Template Library (wprowadzenie)

Programowanie obiektowe

Programowanie i projektowanie obiektowe

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Projektowanie obiektowe Wzorce projektowe

Szablony funkcji i klas (templates)

Podejście obiektowe. Tablice (1) obiektów

Podstawy programowania obiektowego

Programowanie obiektowe

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Programowanie obiektowe

Programowanie sieciowe

Transkrypt:

Programowanie obiektowe Kolekcje - pakiet Java Collections Framework Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 1 / 21

Definicja kolekcji Kolekcja jest obiektem, który grupuje elementy danych (inne obiekty) i pozwala traktować je jak jeden zestaw danych, umoŝliwiając jednocześnie wykonywanie na nim operacji np. dodawania i usuwania oraz przeglądania elementów zestawu. Uwaga: W innych językach programowania kolekcje są nazywane kontenerami. W Javie kontenery są specjalnymi kolekcjami, które grupują komponenty graficznego interfejsu uŝytkownika (GUI). Przykłady kolekcji: folder poczty elektronicznej kolekcja e-maili, katalog na dysku kolekcja plików i katalogów, słownik ortograficzny kolekcja poprawnych słów. Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 2 / 21

Tablice jako kolekcje Do zapamiętywania wielu danych moŝna wykorzystywać tablice. Przykład: class Tablica { private static final int ROZMIAR = 5; private String [] tablica = new String[ROZMIAR]; private int ilosc = 0; public int size() { return ilosc; public boolean add(string s) { if (ilosc==rozmiar) return false; tablica[ilosc++] = s; return true; public boolean remove(string s) { for(int i=0; i<ilosc; i++) if( s.equals(tablica[i]) ) { for(; i<ilosc-1; i++) tablica[i] = tablica[i+1]; tablica[--ilosc] = null; return true; return false; public Object get(int i) { return tablica[i]; Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 3 / 21

Tablice jako kolekcje cd. class TablicaImion { public static void main(string [] args) { Tablica imiona = new Tablica(); System.out.println("\nDodaje 4 imiona."); imiona.add("ala"); imiona.add("ola"); imiona.add("iza"); imiona.add("ola"); System.out.println("\nDrukuje imiona:"); for(int i=0; i<imiona.size(); i++) { System.out.print( " " + imiona.get(i) ); System.out.println("\nUsuwam 2 imiona."); imiona.remove("ola"); imiona.remove("ula"); System.out.println("\nDrukuje imiona:"); for(int i=0; i<imiona.size(); i++) { System.out.print(" " + imiona.get(i) ); System.out.println("\nDodaje 4 imiona."); imiona.add("ala"); imiona.add("ola"); imiona.add("iza"); imiona.add("ola"); System.out.println("\nDrukuje imiona:"); for(int i=0; i<imiona.size(); i++) { System.out.print(" " + imiona.get(i) ); Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 4 / 21

Tablice jako kolekcje cd. W języku Java tablice nie są wygodnym sposobem tworzenia kolekcji poniewaŝ: nie posiadają dedykowanych metod do obsługi kolekcji, rozmiar tablicy jest stały przepełnienie tablicy moŝe spowodować utratę pozostałych danych zapamiętanych w dedykowanych kolekcjach. W praktycznych programach operacje na tablicach lepiej zastąpić operacjami na obiektach klasy Vector. Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 5 / 21

Klasa Vector jako kolekcja Klasa Vector jest ulepszoną wersją kolekcji zbudowaną w oparciu o tablicę. Posiada ona zunifikowany zestaw metod, pozwalający wykonać podobne operacje jak przy bezpośrednich odwołaniach do tablicy, Ta kolekcja nie ma stałego, z góry definiowanego rozmiaru. Gdy wymagany jest większy rozmiar to metody kolekcji Vector automatycznie: tworzą nową tablicę o poŝądanym rozmiarze, kopiują dane z dotychczasowej tablicy do nowej, usuwają dotychczasową tablicę. Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 6 / 21

Klasa Vector jako kolekcja cd. Atrybuty: protected int capacityincrement - współczynnik o który jest zwiększana wielkość tablicy, protected int elementcount - liczba elementów zapamiętanych w kolekcji protected Object[] elementdata - tablica, w której są zapamiętane obiekty zawarte w kolekcji. Konstruktory: Vector() - tworzy pustą tablicę o wielkości 10 Vector(int capacity) - tworzy pustą tablicę o wielkości capacity Vector(int capacity, int increment) - tworzy pustą tablicę o wielkości capacity i ustawia atrybut increment, Vector(Collection c) - tworzy kolekcję wstępnie wypełnioną elementami kolekcji c Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 7 / 21

Klasa Vector jako kolekcja cd. NajwaŜniejsze metody: void add(int index, Object element) - dodaje obiekt element na pozycji index, boolean add(object o) - dodaje obiekt element na końcu wektora, boolean addall(collection c) - dodaje wszystkie obiekty z kolekcji c void insertelementat(object obj, int index) - wstawia element obj do tablicy na pozycji index. int capacity() - zwraca pojemność wektora ( aktualną wielkość tablicy) int size() -zwraca liczbę elementów pamiętanych w tablicy, void clear() - usuwa wszystkie elementy z tablicy Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 8 / 21

Klasa Vector jako kolekcja cd. boolean contains(object elem) - sprawdza, czy element elem jest pamiętany w tablicy int indexof(object elem) - wyszukuje w tablicy pozycji, w której jest pamiętany element elem ( porównywany za pomocą metody equals ) elementat(int index) - zwraca element pamiętany na pozycji index Object get(int index) - zwraca element pamiętany na pozycji index Object firstelement() - zwraca element pamiętany w tablicy na pozycji 0 Object lastelement() - zwraca ostatni pamiętany element boolean isempty() - sprawdza, czy wektor jest pusty Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 9 / 21

Klasa Vector jako kolekcja cd. Object remove(int index) - usuwa z tablicy element pamiętany na pozycji index boolean remove(object o) - usuwa z tablicy pierwsze wystąpienie obiektu o void trimtosize() - zmniejsza rozmiar tablicy do wielkości równej liczbie aktualnie pamiętanych elementów Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 10 / 21

Klasa Vector jako kolekcja - przykład import java.util.*; class WektorImion { public static void main(string [] args) { Vector imiona = new Vector(); System.out.println("\nDodaje 4 imiona."); imiona.add("ala"); imiona.add("ola"); imiona.add("iza"); imiona.add("ola"); System.out.println("\nDrukuje imiona:"); for(int i=0; i<imiona.size(); i++) { System.out.print( " " + imiona.get(i) ); System.out.println("\nUsuwam 2 imiona."); imiona.remove("ola"); imiona.remove("ula"); tworzenie pustego wektora dodawanie danych do wektora pobieranie danych z wektora System.out.println("\nDrukuje imiona:"); for(int i=0; i<imiona.size(); i++) { System.out.print(" " + imiona.get(i) ); System.out.println("\nDodaje 4 imiona."); imiona.add("ala"); imiona.add("ola"); imiona.add("iza"); imiona.add("ola"); usuwanie danych z wektora System.out.println("\nDrukuje imiona:"); for(int i=0; i<imiona.size(); i++) { System.out.print(" " + imiona.get(i) ); odczyt aktualnego rozmiaru wektora Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 11 / 21

Architektura kolekcji Collections Framework Architektura kolekcji zestaw zunifikowanych struktur danych i zasad ich wykorzystywania do reprezentacji kolekcji. Składa się z: interfejsów, implementacji, algorytmów. Najbardziej znane architektury kolekcji to: STL Standard Templates Library w C++, klasy kolekcyjne w SmallTalk-u JFC Java Collections Framework Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 12 / 21

Architektura kolekcji Collections Framework Interfejsy kolekcyjne abstrakcyjne typy danych będące szablonami (wzorcami) kolekcji zawierające metody pozwalające na niezaleŝne od szczegółów realizacyjnych operowanie na kolekcjach. Implementacja kolekcji konkretna realizacja metod zdefiniowanych przez interfejs kolekcyjny. Takie realizacje mogą róŝnić się szczegółami technicznymi, np. realizacja listy jako dynamicznej tablicy lub jako listy z dowiązaniami. Algorytmy kolekcyjne metody wykonujące uŝyteczne operacje obliczeniowe na kolekcjach, np. sortowanie i wyszukiwanie. Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 13 / 21

Podstawowe rodzaje kolekcji Klasy JCF dostarczają środków do posługiwania się następującymi rodzajami kolekcji: listy i ich szczególne przypadki: stosy, kolejki, kolejki podwójne. zbiory i zbiory uporządkowane, mapy tablice asocjacyjne (słowniki) Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 14 / 21

Podstawowe rodzaje kolekcji Lista zestaw elementów z których kaŝdy znajduje się na określonej pozycji. Elementy w liście są ułoŝone w takiej kolejności, w jakiej były dodawane. RóŜne elementy listy mogą zawierać takie same dane. Zbiór zestaw niepowtarzających się elementów. W zbiorze elementy nie mają pozycji. Nie jest moŝliwy dostęp do elementów zbioru po indeksach. Uporządkowanie elementów w zbiorze nie zaleŝy od kolejności dodawania/usuwania elementów. Mapa (tablica asocjacyjna, słownik) zestaw par klucz wartość, przy czym odwzorowanie kluczy w wartość jest jednoznaczne. Uporządkowanie par klucz wartość w mapie nie zaleŝy od kolejności dodawania/usuwania Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 15 / 21

Ogólne operacje na kolekcjach Interfejs Collection definiuje wspólne właściwości i funkcjonalność wszystkich kolekcji (tzn. list, zbiorów i innych) poza mapami. Podstawowe operacje na kolekcjach: int size() - zwraca liczbę elementów zawartych w kolekcji boolean isempty() - sprawdza, czy kolekcja jest pusta boolean contains(object o) - sprawdza, czy kolekcja zawiera podany obiekt. boolean add(object o) - dodaje obiekt o do kolekcji. (Uwaga: operacja opcjonalna nie jest dozwolona dla klolekcji nimodyfikowalnych) boolean remove(object o) - usuwa obiekt o z kolekcji. (Uwaga: operacja opcjonalna nie jest dozwolona dla klolekcji nimodyfikowalnych) Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 16 / 21

Iteratory Iterator jest obiektem słuŝącym do przeglądania elementów kolekcji oraz ewentualnego usuwania ich przy przeglądaniu. KaŜdy iterator implementuje interfejs Iterator, który zawiera następujące metody: Object next() -zwraca kolejny element kolekcji void remove() -usuwa element kolekcji, zwrócony przez ostatnie odwołanie do metody next() boolean hasnext() - zwraca true, jeśli moŝliwe jest odwołanie do metody next() tzn. w kolekcji jest jeszcze kolejny element. Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 17 / 21

Iteratory cd. Interfejs Collection zawiera metodę iterator() która zwraca iterator umoŝliwiający przeglądanie kolekcji. Przykład: Przeglądanie i ewentualne usuwanie obiektów z kolekcji c Iterator iter = c.iterator(); while(iter.hasnext()) { Object o = iter.next(); //... // wykonanie operacji na obiekcie o //... if ( warunek_usuniecia(o) ) iter.remove(); Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 18 / 21

Operacje grupowe na kolekcjach Operacje grupowe na kolekcjach polegają na wykonywaniu za jednym razem pewnych operacji na całych kolekcjach. NaleŜą do nich metody: boolean addall(collection c) -dodanie do dowolnej kolekcji wszystkich elementów kolekcji przekazanej przez parametr c boolean removeall(collectin c) - usunięcie z kolekcji wszystkich elementów, które są zawarte w kolekcji przekazanej przez parametr c boolean retainall(collection) - pozostawienie w kolekcji tylko tych elementów, które są zawarte w kolekcji przekazanej przez parametr c void clear() - usunięcie wszystkich elementów kolekcji. Object [] toarray() - zwraca tablicę obiektów zawartych w kolekcji. Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 19 / 21

Hierarchia list i zbiorów Podstawowe interfejsy kolekcji zbiorowych i listowych Collection Set List SortedSet ArrayList LinkedList HashSet TreeSet Podstawowe klasy implementujące LinkedHashSet Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 20 / 21

Hierarchia map Podstawowe interfejsy map Map SortedMap TreeMap WeakHashMap HashMap Podstawowe klasy implementujące LinkedHashMap Programowanie obiektowe WYKŁAD 8 Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 21 / 21