KOLEKCJE JAVY API: NAJPROSTSZE PODSTAWY



Podobne dokumenty
Programowanie w języku Java. Kolekcje

Programowanie obiektowe

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

Kolekcje. Na podstawie:

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

Programowanie Obiektowe (Java)

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Programowanie i projektowanie obiektowe

Kolekcje - pakiet Java Collections Framework

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

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

Kolekcje - pakiet Java Collections Framework

java.util.* :Kolekcje Tomasz Borzyszkowski

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

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

Podstawy otwartych języków programowania Przechowywanie danych

Kolekcje w języku Java

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

Języki i Techniki Programowania II. Wykład 4. Kolekcje

Java klasy kolekcji dr inż. Paweł Skrzyński, Java - kolekcje, 2010/2011

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

Java SE Laboratorium nr 7. Temat: Kolekcje

Kurs programowania. Wykład 9. Wojciech Macyna

Dawid Gierszewski Adam Hanasko

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

Tworzenie aplikacji w języku Java

Kolekcje obiektów. Wyj tki.

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

Comparable<Klasa_uzytkownika>

Java Collections Framework

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

Comparable<String>, CharSequence. Indicates whether some other object is "equal to" this one. int hashcode() Returns a hash code value for the object.

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

GUI - projektowanie interfejsów cz. II

Programowanie sieciowe

Kolekcje. object that groups multiple elements into a single unit

Podstawy obiektowości

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

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

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

Lista, Stos, Kolejka, Tablica Asocjacyjna

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Klasy i obiekty cz II

Platformy Programistyczne Podstawy języka Java

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

Aplikacje w Javie wykład 7 Kolekcje (listy, zbiory)

Programowanie obiektowe i język Java

Metody Metody, parametry, zwracanie wartości

Kolekcje w Javie cz. 1

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

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

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

WYJĄTKI, KOLEKCJE ZAGADNIENIA: 1. Wyjątki, 2. Kolekcje, vector, hashtable, properties, Klasy Arrays i Collections.

Dokumentacja do API Javy.

Definiowanie własnych klas

Aplikacje Internetowe

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

Języki i techniki programowania Ćwiczenia 4 Wzorce

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe

Wykład 6: Dziedziczenie

Programowanie obiektowe

Obiekty: co i jak. Wykonał: Piotr Pięda dla koła naukowego KNI

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

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


Wykład 4: Klasy i Metody

Języki i techniki programowania Ćwiczenia 2

Projektowanie aplikacji internetowych laboratorium

Aplikacje w środowisku Java

Enkapsulacja, dziedziczenie, polimorfizm

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

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Przykład -

API STREAM WYRAŻENIA LAMBDA

TYPY GENERYCZNE (GENERICS)

Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz

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

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

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Podstawy i języki programowania

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

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

MAS dr. Inż. Mariusz Trzaska. Wykład 3. Wybrane konstrukcje obiektowych języków programowania (2)

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

Programowanie obiektowe i zdarzeniowe

Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wykład 2: Podstawy Języka

Programowanie aplikacji mobilnych

Aplikacje w środowisku Java

Algorytmy i Struktury Danych. Anna Paszyńska

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

Programowanie obiektowe

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Java EE produkcja oprogramowania

Programowanie 3 - Funkcje, pliki i klasy

Transkrypt:

KOLEKCJE JAVY API: NAJPROSTSZE PODSTAWY I. TABLICE, CZYLI PODSTAWOWY RODZAJ KOLEKCJI: ARRAYS Wady i zalety 1. (Na rozgrzewkę) Zdefiniuj dwie klasy w programie (mogą być nawet puste na nasze potrzeby). Stwórz osobne tablice obiektów, przynajmniej po jednej dla każdego typu. Zinicjuj je. Teraz stwórz tablicę typu Object w której umieścisz pewną ilość obiektów typu pierwszego i drugiego. Napisz metodę, która zwraca tablicę informującą o tym ile jest obiektów jednego i drugiego typu w twojej tablicy. 2. Obejrzyj klasę Arrays w dokumentacji java.util.*. Są tam różne funkcje statyczne, które można zastosować na łańcuchach. Stwórz dwa łańcuchy typu int, zawierające np. 5 i 25 elementów. Korzystając z metody fill(), wypełnij jeden i drugi łańcuch różnymi liczbami. Napisz funkcję drukującą twoje tablice. Wyświetl te tablice. Skorzystaj z funkcji arraycopy ażeby przekopiować mniejszą tablicę do większej. Stwórz trzecią tablicę o rozmiarze 5, przekopiuj pierwszą do niej. Przetestuj działanie statycznej metody equals dla Arrays. Teraz zrób takie doświadczenie z dwoma łańcuchami typu String. Stwórz dwa indentyczne łańcuchy. Przekonaj się jak działa metoda equals na tych dwóch łańcuchach. 3. Porównywanie elementów tablic potrzebne np. do sortowania. W Javie, rozwiązanie tego problemu rozwiązano tak, że jest generalna procedura sortowania, która jest stała natomiast to w jaki sposób należy obiekty porównywac można podać w specjalnym obiekcie. Najprościej można zdefiniować naszą klasę jako porównywalną, tzn. zaimplementować interfejs Comparable. Zobacz opis metod jakie trzeba zaimplementować w tym interfejsie. Stwórz teraz klasę składającą się z dwóch pól, która ma być comparable. Stwórz konstruktor, ustalający wartości tych obiektów. Przesłoń metodę compareto, tak aby porównując dwa obiekty tej klasy, porównywane były pierwsze pola tych obiektów. Stwórz, metodę formatującą wydruk tego obiektu, oraz metodę drukującą tablicę obietków tego typu. W main, stwórz tablicę 3 takich obiektów. Skorzystaj teraz z funkcji sort klasy Arrays. Wydrukuj, żeby zobaczyć jaki jest wynik. Można też zamienić tę tablicę na listę, za pomocą statycznej metody Arrays.asList(). Przesłoń, metodę tostring twojej klasy żeby zwracała wartości pól twojego obiektu. Wydrukuj teraz Arrays.asList(twoja tablica).

4. Inną możliwością jest podanie Comparatora, czyli obiektu w którym jest zdefiniowany sposób porównywania naszych obiektów. Np. w poprzednim zadaniu, możesz zastosować komparator klasy Collections, czyli Collections.reverseOrder() jako drugi argument w Arrays.sort. 5. Interfejs komparator składa się z dwóch metod, compare() i equals(). Zobacz opis tych metod w dokumentacji. Stwórz implementację komparatora tak, aby wyświetlane porównywane były tablice obiektów według drugiego pola. Tworząc różne klasy komparatora, na wiele sposobów można sortować tablice. l II. KOLEKCJE Podstawowa (najbardziej pożądana) własność kolekcje automatycznie zmieniają rozmiar jeśli chcemy dodać nowe obiekty. Uproszczony atlas kontenerów w JAVA Collection grupa obiektów. Główny interfejs dla wszystkich innych kontenerów Set czyli zbiór. Nie może być kopii elementów. Porządek tak jak przy tworzeniu. List uporządkowana lista. Można uporządkować jak się chce Map czyli mapa, miniaturowa baza danych. Mapa między kluczami a wartościami. 1 klucz, 1 wartość SortedSet- automatycznie posortowany zbiór SortedMap mapa posortowana względem kluczy Metody kontenerów add(object o) Iterator iterator()

addall(collection c) remove(object o) void clear() contains(object o) containsall(collection c) equals(object o) removeall(collection c) retainall(collection c) Object[] toarray() int hashcode() Object[] toarray(object[] a) List void add(int index, Object element) Iterator iterator() add(object o) int lastindexof(object o) addall(collection c) addall(int index, Collection c) void clear() ListIterator listiterator() ListIterator listiterator(int index) Object remove(int index) contains(object o) remove(object o) containsall(collection c) removeall(collection c) equals(object o) retainall(collection c) Object get(int index) int hashcode() int indexof(object o) Set add(object o) addall(collection c) Object set( int index, Object element) List sublist(int fromindex, int toindex) Object[] toarray() Object[] toarray(object[] a) Iterator iterator() void clear() remove(object o) contains(object o) containsall(collection c) equals(object o) int hashcode() removeall(collection c) retainall(collection c) Object[] toarray()

Object[] toarray(object[] a) SortedSet Comparator comparator() first() SortedSet headset(object to) Object last() SortedSet subset(object from, Object to) SortedSet tailset(object fromelement) Map void clear() containskey(object key) Set keyset() containsvalue(object value) Object put(object key, Object value) Set entryset() void putall(map t) equals(object o) Object get(object key) int hashcode() Object remove(object key) Collection values() SortedMap Comparator comparator() Object firstkey() SortedMap headmap(object tokey) Object lastkey() SortedMap submap(object from, Object to) SortedMap tailmap(object fromkey) 1. Pierwszą przydatną własnością kontenerów jest to, że drukuj ładnie sformatowaną informację dla obiektów w kontenerze. Jako przykład, stwórz klasę testującą tę własność zarówno dla Collection jak i Map. W tym celu, stwórz przeciążoną metodę wypełnij() przyjmującą i zwracającą Collection/Map. W każdym z tych metod dodaj obiekty typu string do kontenera argumentu, np. Ala ma kota do Collection (dodawanie tu odbywa się za pomocą add( Ala ) etc. Oczywiście trzeba zwrócić kontener po dodaniu wszystkich wpisów. W Map, żeby coś dodać należy skorzystać z metody put(klucz, wartość), czyli np. put ( Ala, dziewczyna ) etc W mainie, wydrukuj nowo wypełnione egzemplarze Collection wywołane oczywiście przez new - ArrayList, HashSet oraz Map- HashMap, wywołane np. w sposób anonimowy w funkcji wypełnij. Dodaj teraz do metody z Collection duplikat jednego z wpisów, i teraz zobacz działanie we wszystkich 3 przypadkach.

2. Stwórz klasę testującą funkcje w ArrayList. Dodaj 4 czy 5 elementów typu String do kolekcji. Wydrukuj wynik działania metod indexof(jakiselement), set, remove, sublist, size, get. Można również w add() określić w pierwszym argumencie pod, którym indeksem ma zostać wstawiony obiekt. 3. Przetestuj różnicę pomiędzy HashSet i TreeSet też na obiektach typu string. Podobnie przetestuj różnicę pomiędzy HashMap oraz TreeMap Ostrzeżenie należy pamiętać, że wkładając rzeczy do kolekcji, wszystko zaczyna być traktowane jako obiekt, więc należy pamiętać o rzutowaniu do właściwego typu jeśli chce się coś na tych obiektach robić metodami klasy, z której pochodzą. Od JDK1.5, istnieją parametryzowane typu pozwalające określić jaki typu obiektu ma się znajdywać w kontenerze. Wtedy nie trzeba rzutować. O tym będzie później. Jeśli chodzi o sortowanie ( niektóre kolekcje muszą mieć możliwość sortowania, np. TreeSet etc), to trzeba zrobić to samo co zostało omówione dla tablic. 4. Iterator(y). Iterator pozwala przesuwać się po kontenerze. Zwykłe iteratory są wyposażone w następujące metody: next() zwraca następny obiekt w listcie, hasnext() zwraca czy jest jakiś następny element, remove() wymazuje ostatnio zwrócony obiekt. Dla kontenerów typu List, jest bardziej rozbudowany interator zwany ListIterator. Dla każdego konkretnego kontenera można wywołać iteratora, np. List a = new ArrayList();., Iterator e=a.iterator(); Jako interesujące zastosowanie iterator, napisz klasę zawierającą jedną metodę do której przekazywany jest iterator, która umożliwia wydrukowanie dowolnej kolekcji. Skorzystaj z metod next() i hasnext(). Przetestuj swoją klasę na jednym z poprzednich przykładów. 5. Stwórz klasę umożliwiająca zbadanie uczciwości generator liczb losowych Random(). Czyli chodzi o to by zbierać ile razy każda liczba się pojawi w wyniku wielu prób. To jest zadanie dopasowane do zastosowania HashMap. Stwórz klasę licznika, składająca się z liczby całkowitej. W main(), stwórz nowy HashMap do którego będziesz dodawać nowe liczby jeśli się pojawią lub będziesz inkrementować ilość wystąpień już istniejących liczb. Liczba losowę potraktuj jako klucz, a obiekt licznika jako wartość, w każdym położeniu HashMap. Sprawdzanie czy dany klucz już istnieje czy nie odbywa się za pomocą containskey. (Pamiętaj, że do kontenerów można tylko dodawać obiekty a więc trzeba używać klasy Integer dla wygenerowanych liczb całkowitych). Aha należy przesłonić metodę tostring dla klasy licznika, tak jak chcesz, żeby było wyświetlania podczas drukowania HashMap(y).

Generalnie (nie musisz tego robić do powyższego zadania), klasa która używana jest jako klucz w mapie musi przesłaniać metodę hashcode() i equals(). O tym może w przyszłym tygodniu. 6. (Generyczność). Określenie jaki typ obiektów będzie używali w danej kolekcji. Deklaracja: Przykład List<String> mystring= new ArrayList<String>(); Map<String,String> mymap= new HashMap<String> (); import java.util.*; public class ListTest1 { public static void main(string[] args) { List entries = new ArrayList(); double d; while((d = Math.random()) > 0.1) { entries.add("value: " + d); String entry; for(int i=0; i<entries.size(); i++) { entry = (String)entries.get(i); System.out.println(entry); import java.util.*; public class ListTest2 { public static void main(string[] args) { List<String> entries = new ArrayList<String>(); double d; while((d = Math.random()) > 0.1) { entries.add("value: " + d); for(string entry: entries) { // for each System.out.println(entry); 12 Stwórz klasę Okrąg, wyposażoną m.in. w metodę obliczającą powierzchnię. Stwórz listę takich okręgów o losowych promieniach. Skończ budowanie kolekcji jeśli powierzchnia okręgu będzie mniejsza niż 0.075. Wyznacz jaka była najmniejsza i największa powierzchnia wygenerowana podczas symulacji. Skorzystaj z generyczności dla twojego obiektu.