java.util.* :Kolekcje Tomasz Borzyszkowski

Podobne dokumenty
Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

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

Programowanie w języku Java. Kolekcje

Programowanie Obiektowe (Java)

Java Collections Framework

Kolekcje. Na podstawie:

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

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

Kolekcje - pakiet Java Collections Framework

Podstawy otwartych języków programowania Przechowywanie danych

Kolekcje - pakiet Java Collections Framework

Programowanie obiektowe

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

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

Kurs programowania. Wykład 9. Wojciech Macyna

Java SE Laboratorium nr 7. Temat: Kolekcje

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

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

Dziedziczenie. Tomasz Borzyszkowski

Comparable<Klasa_uzytkownika>

Dawid Gierszewski Adam Hanasko

KOLEKCJE JAVY API: NAJPROSTSZE PODSTAWY

GUI - projektowanie interfejsów cz. II

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

Lista, Stos, Kolejka, Tablica Asocjacyjna

Kolekcje w Javie cz. 1

Pakiety i interfejsy. Tomasz Borzyszkowski

Kolekcje. object that groups multiple elements into a single unit

Kolekcje obiektów. Wyj tki.

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

Platformy Programistyczne Podstawy języka Java

Tworzenie aplikacji w języku Java

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

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

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

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

WSTĘP DO INFORMATYKI. Struktury liniowe

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

STL Standardt Template Library (wprowadzenie)

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

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

Tabela wewnętrzna - definicja

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Wykład 3 Składnia języka C# (cz. 2)

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

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

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

Struktury Danych i Złożoność Obliczeniowa

Programowanie i projektowanie obiektowe

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Interfejsy i klasy wewnętrzne

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Enkapsulacja, dziedziczenie, polimorfizm

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

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

API STREAM WYRAŻENIA LAMBDA

Programowanie i struktury danych

Programowanie obiektowe

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

Programowanie obiektowe

Diagramy klas. dr Jarosław Skaruz

Klasy abstrakcyjne, interfejsy i polimorfizm

STL: Lekcja 1&2. Filozofia STL

Programowanie obiektowe

Definicje klas i obiektów. Tomasz Borzyszkowski

Programowanie sieciowe

Szablony funkcji i szablony klas

Języki i techniki programowania Ćwiczenia 2

Programowanie obiektowe

Kompletna dokumentacja kontenera C++ vector w -

Java niezbędnik programisty spotkanie nr 9. Java 2 Platform, Standard Edition 5.0

UML a kod. C++, Java i C#

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

PRZEWODNIK PO PRZEDMIOCIE

Programowanie obiektowe - 1.

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Dokumentacja do API Javy.

Języki programowania imperatywnego

Programowanie w Javie - wykład 13 Kolekcje c.d. ( mapy)

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Podstawy programowania. Podstawy C# Tablice

Programowanie Komponentowe Zarządzanie obiektami: kontenery

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

Programowanie w Internecie. Java

Programowanie aplikacji mobilnych

Kolekcje w języku Java

Wprowadzenie do szablonów szablony funkcji

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

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór

Programowanie obiektowe

Wprowadzenie do szablonów szablony funkcji

Java: interfejsy i klasy wewnętrzne

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Programowanie obiektowe

Programowanie w Javie- wykład 12 Kolekcje (zbiory)

Dynamiczne struktury danych

Kurs WWW. Paweł Rajba.

Transkrypt:

java.util.* :Kolekcje Tomasz Borzyszkowski

Wstęp Kolekcje w Java dają programiście pewien standardowy sposób radzenia sobie z przetwarzaniem grup obiektów. Implementacja kolekcji w Java składa się z następujących składowych: Interfejsów: definiujących abstrakcyjne właściwości i operacje kolekcji, w oderwaniu od konkretnych implementacji Implementacji: klasy będące implementacjami odpowiednich interfejsów Algorytmów: metod pozwalających na efektywne przetwarzanie kolekcji; np.: wyszukiwanie czy sortowanie. Algorytmy te zwykle są polimorficzne, tj. są zdefiniowane dla pewnego rodzaju kolekcji a nie tylko dla wybranej klasy Podstawowe cechy kolekcji to: wysoka efektywność kodu oraz to, że kolekcje różnych typów posiadają podobną i prostą obsługę. Kolekcje implementują także interfejs Iterator, ułatwiający i standaryzujący dostęp do kolejnych elementów kolekcji. 2

Interfejsy Hierarchia podstawowych interfejsów wykorzystywanych w kolekcjach: Collection Map Set List Queue SortedMap SortedSet Zobacz: CollectionI.java SetI.java ListI.java QueueI.java SortedSetI.java 3

Typy parametryczne Z kolekcjami w Java 5.0 związane są tzw. typy parametryczne. Pozwalają one parametryzować definicje klas i interfejsów typami, które będą określone później, np. w trakcie użycia klasy czy interfejsu. Zobacz: Stack_1.java Stack_1G.java Zauważ, że: typ parametryczny T wprowadzamy za nazwą definiowanego typu, natomiast wewnątrz definicji klasy używamy go jak zwykłego typu typ Stack<Integer> jest typem stosów elementów typu Integer i nie może zawierać elementów innych typów (np.: String) ponieważ kompilator Javy wie, że wszystkie elementy kolekcji są jednorodne, więc nie są wymagane jawne rzutowania, takie jak: String napis = (String)s.pop(); 4

Klasa ArrayList Klasa ta implementuje interfejs List. W odróżnieniu od zwykłych tablic obiekty tego typu mogą dynamicznie się powiększać by pomieścić większą liczbę elementów są tablicami o zmiennej długości. Zobacz: ArrayListDemo.java ArrayListDemoG.java ArrayList() ArrayList(int capacity) ArrayList(Collection<? extends E> c) Czasem zachodzi potrzeba przepisania kolekcji typu ArrayList na zwykłą tablicę. Można to zrealizować za pomocą metody toarray(). Zobacz: ArrayListToArray.java ArrayListToArrayG.java 5

Klasa LinkedList Klasa ta także implementuje interfejs List. Jest ona realizacją koncepcji listy dowiązaniowej. LinkedList() LinkedList(Collection<? extends E> c) Klasa definiuje typowe metody związane z obsługą list, takie jak: addfirst(e o), addlast(e o), getfirst(), getlast(), removefirst(), removelast(). Zobacz: LinkedListDemo.java LinkedListDemoG.java 6

Klasa HashSet i TreeSet Klasa HashSet realizuje koncepcję tablicy z kodowaniem mieszanym. W zwykłych tablicach znalezienie elementu często wiąże się z przejrzeniem sekwencyjnym wszystkich elementów tablicy. W tablicach hashowych mamy do dyspozycji specjalną funkcję, która każdemu elementowi przypisuje jego indeks. Dlatego nawet standardowe operacje (wyszukiwanie, usuwanie, dodawanie,...) zwykle zajmują stały czas, nawet dla dużych tablic. Zwykle współczynnik wypełnienia tablicy jest 75% (patrz konstruktory). Kolejną klasą jest klasa TreeSet. Realizuje ona koncepcję posortowanego drzewa binarnego. Nadaje się doskonale do przechowywania dużej liczby posortowanych informacji, do których chcemy mieć szybki dostęp. Zobacz: HashSetDemo.java TreeSetDemo.java 7

Iteratory Zobacz: IteratorDemo.java ForLoop.java IteratorDemo_2.java Zanim uzyskamy dostęp do kolekcji za pomocą iteratora, powinniśmy utworzyć obiekt iteratora. Służy do tego metoda iterator() dostępna w każdej klasie. Ogólnie by użyć iteratora do przechodzenia po elementach kolekcji trzeba: Utworzyć iterator wskazujący na początek kolekcji, przez wywołanie metody iterator() Utworzyć pętlę z warunkiem przejścia hasnext() Wewnątrz pętli możemy otrzymać bieżący element przez wywołanie metody next() Dla kolekcji implementujących interfejs List możemy utworzyć iteratora za pomocą wywołania metody listiterator(). W Java 5.0 dodano możliwość iterowania po kolekcjach i tablicach bez konieczności tworzenia iteratora szczegóły w przykładach. 8

Klasy typu Map Zobacz: HashMapDemo.java TreeMapDemo.java Obiekt klasy Map przechowuje związki pomiędzy kluczem a wartością. Znając klucz, można łatwo znaleźć związaną z nim wartość. Zarówno klucze jak i wartości są obiektami. O ile klucze muszą być unikalne, wartości mogą się powtarzać. Przykładem klasy typu Map jest klasa HashMap. Podobnie jak HashSet zapewnia prawie stały czas dostępu do przechowywanych elementów nawet dla dużych kolekcji. Klasa ta nie grawantuje żadnej kolejności przechowywanych elementów, tj. Kolejność dodawania elementów do kolekcji nie zawsze jest taka jak kolejność otrzymana za pomocą odp. iteratora. Kolejnym przykładem jest klasa TreeMap. Klasa ta umożliwia przechowywanie elementów w zadanym porządku przy bardzo efektywnej metodzie dostępu do elementów. 9

Comparators Zobacz: MyComp.java TreeMapDemo2.java Klasy TreeSet i TreeMap przechowują elementy w pewnym ustalonym, naturalnym porządku. Obie klasy posiadają konstruktor, który jako argument pobiera obiekt klasy Comparator. Klasa ta umożliwia przekazanie do klas TreeSet i TreeMap nowego porządku. Interfejs Comparator definiuje dwie metody: int compare(object obj1, Object obj2): definiuje porządek na obiektach; oddaje: 0, gdy obj1=obj2, 1, gdy obj1>obj2 i -1, gdy obj1<obj2; metoda może także oddać wyjątek ClassCastException, gdy typy porównywanych obiektów są nieporównywalne boolean equals(object obj): metoda oddaje true, gdy obj i obiekt wywołujący są klasy Comparator i używają tego samego porządku, w przeciwnym przypadku oddaje false. 10

Dostępne implementacje W Java dostępne są następujące implementacje kolekcji: Tablica hashowa Tablica o zmiennej długości Implementacje Drzewo wyważone Lista wiązana Tablica hashowa + Lista wiązana Interfejsy Set List Map HashSet HashMap ArrayList TreeSet TreeMap LinkedList Linked HashSet Linked HashMap 11

Algorytmy i tablice W Java zdefiniowano wiele algorytmów związanych z przetwarzaniem kolekcji. Algorytmy te są zdefiniowane jako statyczne metody klasy Collections. Realizują one takie operacje jak: sortowanie, wyszukiwanie elementów, kopiowanie kolekcji, czy synchronizowanie kolekcji na potrzeby wątków. Zobacz: Sort.java Anagram2.java + dictionary.txt Już w Java 2 do pakietu java.util dodano klasę Arrays. Klasa ta dostarcza wielu metod statycznych, usprawniających pracę z tablicami. Chociaż klasa ta nie należy do kolekcji, pozwala wypełnić lukę pomiędzy kolekcjami i tablicami. Zobacz: ArraysDemo.java 12

Klasy Javy 1.1 Przed wprowadzeniem Javy 1.2, Java nie posiadała kolekcji. W zamian udostępniono kilka klas służących do przechowywania obiektów. W Java 1.2 zachowano je, przebudowująć je jednak tak, by współpracowały z kolekcjami. Klasy te są synchronizowane w odróżnieniu od klas kolekcji. Przykładowe stare klasy: Vector i podklasa Stack podobne do ArrayList Dictionary podobna do Map Hashtable podobna do HashMap Zobacz: VectorDemo.java StackDemo.java Phonebook.java 13