Kolekcje obiektów. Wyj tki. Robert A. Kªopotek r.klopotek@uksw.edu.pl Wydziaª Matematyczno-Przyrodniczy. Szkoªa Nauk cisªych, UKSW 30.03.2017
Kolekcje obiektów Kolekcje obiektów (Java Collections) sªu» do przechowywania obiektów jednego typu Posiadaj ró»ne metody i mechanizmy takie jak szukanie, sortowanie, wstawianie, usuwanie i inne Java Collection dostarcza wielu interfejsów (Set, List, Queue, Deque, itp.) oraz wielu klas (ArrayList, Vector, LinkedList, PriorityQueue, HashSet, LinkedHashSet, TreeSet, itp.) Wbudowany pakiet java.util zawiera te wszystkie kolekcje obiektów 2 / 28
Metody interfejsu Collection (1/2) public boolean add(object element) public boolean addall(collection c) public boolean remove(object element) public boolean removeall(collection c) public boolean retainall(collection c) public int size() public void clear() public boolean contains(object element) public boolean containsall(collection c) 3 / 28
Metody interfejsu Collection (2/2) public Iterator iterator() public Object[] toarray() public boolean isempty() public boolean equals(object element) public int hashcode() Metody interfejsu Iterator public boolean hasnext() public Object next() public void remove() - usuwa element, na który wskazuje iterator, rzadko si go u»ywa 4 / 28
Hierarchia kolekcji 5 / 28
Collection Framework 6 / 28
Klasa Collections extends Object biblioteka do obsªugi ogólnej kolekcji zawiera tylko metody statyczne sªu» ce do dziaªa«na kolekcjach oraz tworzeniu nowych kolekcji algorytmy, które modykuj kolekcj, która nie jest do tego przystosowana MO E wyrzuci wyj tek UnsupportedOperationException, ale nie musi przykªad: metoda sort na niemodykowanej kolekcji 7 / 28
Klasa Collections - metody static <T> boolean addall(collection<? super T> c, T... elements) static <T> Queue<T> aslifoqueue(deque<t> deque) static <T> int binarysearch(list<? extends T> list, T key, Comparator<? super T< c) static <E> List<E> checkedlist(list<e> list, Class<E> type) static <E> Set<E> checkedset(set<e> s, Class<E> type) static <E> SortedSet<E>checkedSortedSet(SortedSet<E> s, Class<E> type) static void reverse(list<?> list) static <T> T max(collection<? extends T> coll, Comparator<? super T> comp) static <T extends Object & Comparable<? super TT min(collection<? extends T> coll) static boolean replaceall(list list, T oldval, T newval) 8 / 28
Implementacje List<E> List<E> - modeluje liniow struktur podobn do rozszerzalnej tablicy, mo»emy u»ywa indeksu aby dosta si do elementów, elementy mog by zduplikowane. 9 / 28
ArrayList vs LinkedList 1 ArrayList u»ywa tablic dynamicznych do przechowywania elementów 2 Operacje na ArrayList s wolne (zwªaszcza usuwanie) 3 ArrayList implementuje tylko interfejs List 4 ArrayList jest lepsze do sortowania i dost pu do danych 1 LinkedList u»ywa list dwukierunkowych do przechowywania elementów 2 Operacje na LinkedList s szybsze 3 LinkedList implementuje interfejsy List i Deque 4 LinkedList jest lepsze do manipulowania danymi 10 / 28
ArrayList vs Vector 1 ArrayList nie jest synchronizowany, wi c jest szybszy 2 ArrayList zwi ksza si o 50%, gdy braknie miejsca 3 ArrayList u»ywa interfejsu Iterator 1 Vector jest synchronizowany, wi c jest wolniejszy, zwªaszcza w ±rodowisku wielow tkowym 2 Vector zwi ksza si o 100%, gdy braknie miejsca 3 Vector u»ywa interfejsów Enumeration oraz Iterator 11 / 28
Implementacje Set<E> Set<E> - modeluje matematyczny zbór, elementy nie mog si powtarza. Istniej posortowane lub uporz dkowane struktury, np. TreeSet. 12 / 28
Implementacje Queue<E> Queue<E> - modeluje kolejk First-in-First-out (FIFO) oraz priorytetow. Interfejs Deque<E> modeluje kolejki, do których jest dost p z obu stron. 13 / 28
Implementacje Map<K,V> Map<K,V> - modeluje map par o dwóch typach K - Key i V - value. Klucze nie mog si powtarza. Interfejs SortedMap<K, V> modeluje mapy posortowane lub uporz dkowane po kluczu, np. TreeMap. 14 / 28
HashMap vs Hashtable 1 HashMap nie jest synchronizowany, wi c jest szybszy, ale mo»emy zsynchronizowa (Map m = Collections.synchronizedMap(hashMap);) 2 HashMap pozwala na jeden klucz NULL i wiele warto±ci NULL 3 Iterator HashMap jest "fail-fast" (ConcurrentModicationException) 1 Hashtable jest synchronizowany, wi c jest wolniejszy, zwªaszcza w ±rodowisku wielow tkowym 2 Hashtable nie pozwala na»adne warto±ci NULL ani w kluczu ani w warto±ciach 3 Iterator Hashtable jest "fail-safe" (kopia caªej struktury, nie ma aktualizacji zmian) 15 / 28
Comparable vs Comparator 1 Comparable jest przeznaczony do sortowania jednokryterialnego 2 Comparable oddziaªuje na aktualn klas 3 sortowanie z wykorzystaniem metody compareto() 4 w pakiecie java.lang 1 Comparator jest przeznaczony do sortowania wielokryterialnego 2 Comparator nie oddziaªuje na aktualn klas 3 sortowanie z wykorzystaniem metody compare() 4 w pakiecie java.util 16 / 28
Wyj tki w Javie System obsªugi wyj tków jest pot»nym mechanizmem do radzenia sobie z bª dami czasu wykonania (runtime) Wyj tek w Javie to zdarzenie, które zakªóca normalne wykonanie programu. Jest to obiekt, który jest wyrzucany w trakcie dziaªania programu (czyli mo»na rzutowa na Object). Obsªuga wyj tków mo»e pomóc w przywróceniu programu do normalnego dziaªania. Jako programi±ci powinni±my obsªu»y co do zasady wszystkie wyj tki instrukcja throw umo»liwia wyrzucenie wyj tku modykator metody throws umo»liwia podanie jaki wyj tek wyrzuca metoda (ten wyj tek nale»y potencjalnie obsªu»y, je±li wywoªujemy tego typu metod ) 17 / 28
Obsªuga wyj tków w C++ # include < iostream > using namespace std ; int main () { int x = -1; try { if ( x < 0 ){ throw x ; catch ( int x ) { cout << " Exception : " << x << endl ; getchar (); return 0; 18 / 28 # include < iostream > using namespace std ; int main () { int x = -1; char * ptr ; ptr = new char [256]; try { if ( x < 0 ){ throw x ; if ( ptr == NULL ){ throw " ptr is NULL " ; catch (...){ // catch all cout << " Exception! " << endl ; exit (0); return 0;
Obsªuga wyj tków w Javie class Test extends Exception { class Main { public static void main ( String args []) { try { throw new Test (); catch ( Test t ) { System. out. println ( " Got the Test Exception " ); finally { System. out. println ( " Inside finally block " ); 19 / 28
Sekwencja try-catch-nally 20 / 28
nal vs nally vs nalize nal - sªowo kluczowe, które nakªada ograniczenia na klasy, metody i zmienne. Klasy nala nie mog by dziedziczone, metody nal nie mog by modykowane, a warto± zmiennych nal nie mo»e by zmieniana po inicjalizacji. nally - blok kodu, który wykona si zawsze, niezale»nie czy obsªu»yli±my wyj tek czy nie nalize - metoda, która si wykona przed usuni ciem obiektu przez od±miecacz pami ci (GC) 21 / 28
Tworzenie wyj tku - przykªad public class I n s u f f i c i e n t B a l a n c e E x c e p t i o n extends Exception { private final double available ; private final double required ; public I n s u f f i c i e n t B a l a n c e E x c e p t i o n ( double available, double required ) { super ( " Available $ " + available + " but required $ " + required ); this. available = available ; this. required = required ; public double getavailable () { return available ; public double getrequired () { return required ; public double getdifference () { return required - available ; 22 / 28
Hierarchia wyj tków 23 / 28
Hierarchia Exception 24 / 28
Hierarchia Error 25 / 28
Typy wyj tków Checked Exception - klasy, które rozszerzaj Throwable oprócz RuntimeException i Error. Wyj tki te s sprawdzane w czasie kompilacji. Metody, które generuj Checked Exception musz je wyrzuca (modykator throws) Metody, które wywoªuj takie metody musz obsªu»y ich wyj tki lub wyrzuci je dalej (stos wywoªa«). Unchecked Exception - klasy, które rozszerzaj RuntimeException. Wyj tki te s sprawdzane w czasie wykonania programu. Error - s nieodwracalne, np. OutOfMemoryError, VirtualMachineError, AssertionError, itp. w ocjalnym tutorialu Java zasada jest taka,»e je±li program mo»e wróci do normalnego stanu to nale»y u»y wyj tek chceck, je±li nie 26 / mo»e 28 wróci do normalnego stanu dziaªania to nale»y rzuci wyj tek uchcecked.
Kiedy u»ywa jakiego typu wyj tku? Argumenty za Checked Exceptions kompilator zmusza nas do ªapania lub propagacji wyj tków checked, co sprawia,»e ci»ko nam je przeoczy wyj tki unchcecked mo»emy ªatwiej przeoczy, poniewa» kompilator nie zmusza nas do ich obsªugi kiedy metoda nie deklaruje jakie wyj tki unchcecked morze wyrzuci to trudniej nam je obsªu»y Argumenty za Unchecked Exceptions wyj tki checked, które s propagowane w gór poprzez stos wywoªa«zaciemniej nam prawdziwa przyczyn i ¹ródªo bª du wyj tki chcecked staj si cz ±ci sygnatury metody, jej interfejsu i pó¹niej trudniej dodawa i usuwa wyj tki z deklaracji metody w klasie czy interfejsie 27 / 28
28 / 28 Pytania?