java lang Object Tato nejobecnj tda je koenem

java. lang. Object • Tato nejobecnější třída je kořenem hierarchického stromu. • Nemá žádné dostupné atributy, má jen implicitní konstruktor a 11 přetížených, dostupných, instančních metod, které zdědí všechny další třídy - ať jsou definovány kdekoli a kýmkoli. • public boolean equals(Object obj) - definuje relaci ekvivalence objektů: x. equal(y) vrací true právě tehdy, když x == y. Je-li tato metoda přepsána, bývá nutno přepsat metodu hash. Code kvůli dodržení uzance, že ekvivalentní objekty musejí mít stejné hash kódy. • public int hash. Code( ) - vrací int číslo, přičemž: Musí vracet totéž číslo v jednom běhu. Ekvivalentní objekty (dle equals( ) ) musejí vracet totéž číslo. Neekvivalentní objekty (dle equals( ) ) nemusejí vracet různá čísla. Avšak vracení různých čísel zlepšuje funkci hashtable. PJV 04 1

Třída java. lang. Object • public final Class get. Class( ) - vrací objekt typu Class, čímž lze typ každého objektu přesně identifikovat. • public String to. String( ) - vydává popisný řetěz. Doporučuje se tuto metodu v potomcích přepsat tak, aby vracený popisný řetěz vyjadřoval typ a stav objektu. Metoda se automaticky volá při konkatenaci a v metodách print(. . . ) či println(. . . ). • public final void wait(. . . ) throws Interrupted. Exception - tyto metody umožňují zařadit objekt do čekárny. • public final void notify. All( ) - uvolňuje všechny objekty z čekárny. • public final void notify( ) - uvolňuje objekt z čekárny. PJV 04 2

Třída java. lang. Object • protected Object clone( ) throws Clone. Not. Supported. Exception umožňuje mělké klonování potomků. • protected void finalize( ) throws Throwable - tuto metodu volá garbage collector když hodlá objekt zrušit. Potomek může metodu přepsat a provést nějakou údržbu. • Pozn. : Garbage collector lze nuceně vyvolat metodou System. gc(). PJV 04 3

Pole (Array) • Pole a prvky pole se poznají podle hranatých závorek. K prvkům pole se přistupuje pomocí indexu v rozmezí 0. . . pole. length -1. Počet hranatých závorek udává dimensionalitu. Vícedimensionální pole se vytvoří skládáním jednodimensionálních a takové pak nemusí být rektangulární. • Každé pole je objekt, na který se tudíž odkazujeme referenční proměnnou a tudíž může být referováno typem Object. • Pomocí metody java. lang. get. Class() lze zjistit vlastnosti pole. • Dimensionalita se pak manifestuje počtem otevíracích hranatých závorek. Typy primitivních polí jsou vyznačeny písmeny takto: B, S, C, I, J, F, D, Z pro byte, short, char, int, long, float, double, boolean Typ referenčních polí je vyznačen písmenem L a úplným jménem třídy. PJV 04 4
![Pole (Array) • Příklad: String[ ] s = { "AAA", " BBB", "CCC " Pole (Array) • Příklad: String[ ] s = { "AAA", " BBB", "CCC "](http://slidetodoc.com/presentation_image_h2/ced0ea00cbaa49c2133d4ab7f0e5f162/image-5.jpg)
Pole (Array) • Příklad: String[ ] s = { "AAA", " BBB", "CCC " }; System. out. println( s. get. Class()+" "+Array. get. Length(s) ); int [ ][ ] a = new int [ ][ ] { { 333, 666}, {777} }; System. out. println( a. get. Class()+" "+Array. get. Length(a) ); Vypíše: class [L java. lang. String; class [ [ I 2 3 Třída java. util. Arrays umožňuje třídění, vyhledávání, vyplňování a porovnávání polí. Navazuje také na operace s kolekcemi. K rafinovanému zacházení slouží třída java. lang. reflect. Array, která umožňuje dynamicky vytvářet a modifikovat pole. PJV 04 5

Kolekce (Collection) Kolekcí čili sbírkou se rozumí skupina objektů v paměti, organizovanou dle JCF (Java Collection Framework - tento rámec je standardní od Javy 1. 2) je uložen ponejvíce v balíčku java. util a zahrnuje zejména: • Interfejsy: Collection - sbírka objektů Set, Sorted. Set - sbírka unikátních objektů - případně uspořádaná Map, Sorted. Map - sbírka dvojic (zobrazení) objektů key value List - indexovaná sbírka objektů Comparator, java. lang. Comparable - pro porovnávání objektů Iterator, List. Iterator, Random. Access - pro přístup k prvkům • Abstraktní třídy: Abstract. Collection Abstract. Set, Abstract. Map, Abstract. List, Abstract. Sequential. List PJV 04 6

Kolekce (Collection) • Třídy: Array. List, Linked. List Hash. Set, Linked. Hash. Set, Hash. Map Linked. Hash. Map Tree. Set, Tree. Map Vector, Stack, Hashtable, Properties Arrays, Collections Algoritmy pro řazení, přesouvání, doplňování, kopírování a vyhledávaní PJV 04 7

Java Collection Framework Collection Set jen statické metody List Abstract Collections Arrays Sorted. Set Abstract List Array. List Random. Access Tree. Set třída PJV 04 Hash. Set Abstract Sequential List Vector Linked Hash. Set Linked List Stack abstr. třída interfejs extends implements 8

Java Collection Framework Map Nepatří do JCF Sorted. Map Dictionary Abstract Map Comparator Hashtable Properties Tree. Map Hash. Map Identity Hash. Map Linked Hash. Map Weak Hash. Map Iterator List. Iterator třída PJV 04 abstr. třída interfejs extends implements 9

Užité techniky interface List - Set RA Array. List Hash. Set Sorted. Set Map Sorted. Map • • HT HT RA BT LL - PJV 04 - - BT - LL Linked. List - - Tree. Set - Hash. Map - - - Tree. Map - HT+LL Linked. Hash. Set Linked. Hash. Map - hastable - rozmítaná tabulka, resizable array - pole s proměnnou velikostí, balanced tree - vyvážený strom, linked list - spojový seznam. 10

Collection Interfejs Collection umožňuje jednotlivé i hromadné operace: • Dotazy: int size( ) boolean is. Empty( ) boolean contains( Object o ) boolean contains. All( Collection c ) - true, obsahuje-li všechny prvky c Iterator iterator( ) Object[ ] to. Array(Object a[ ] ) vytvoří pole daného typu takové velikosti, aby se do něj vešly všechny prvky z kolekce. • Modifikace: boolean add( Object o ) boolean remove( Object o ) boolean dd. All( Collection c ) boolean remove. All( Collection c ) - odstraňuje všechny patřící do c boolean retain. All( Collection c ) - odstraňuje všechny mimo patřící do c void clear( ) PJV 04 11

Collection • Třída Abstract. Collection implementuje Collection, abstraktními zůstávají pouze metody iterator( ) a size( ). • Interfejs Iterator slouží k postupnému jednosměrnému výpisu sbírky v pořadí v závislosti na jejím typu. • Interfejs List. Iterator je potomkem Iteratoru a navíc má metody prohlížení oběma směry, získávání indexů a vkládání prvků. • Interfejs Random. Access je pouhý marker. PJV 04 12

List Interfejs List je potomkem Collection, který vyžaduje indexovaný přístup k prvkům sbírky void add ( int index, Object element ) boolean add. All ( Collection c ) boolean add. All ( int index, Collection c ) Object get ( int index ) Object set ( int index, Object element ) Object remove (int index ) int index. Of ( Object o ) - hledání zepředu int last. Index. Of ( Object o ) - hledání zezadu List. Iterator list. Iterator ( ) List. Iterator list. Iterator ( int index ) List sub. List ( int from. Index, int to. Index ) - pohled PJV 04 13

Abstract. List • Třída Abstract. List je potomkem třídy Abstract. Collection a interfejsu List. Ta přidává jen metodu protected void remove. Range( int, int) a abstraktními jsou jen metody get( int ) a size( ). Abstract. List sleduje také modifikace a komodifikace. Má tři přímé potomky: • Abstract. Sequential. List - polotovar pro sekvenční přístup s abstraktními metodami list. Iterator( int ) a size( ). • Array. List - nesynchronizovaná obdoba Vectoru. • Vector je třída stará od 1. 0 a je synchronizovaná - od verze 1. 2 redefinovaná. Některé původní metody mají nově, systematičtěji nazvané ekvivalenty, např. : element. At( int ) vs. get( int ). Radno používat ty, které jsou zavedené v příslušných interfejsech. Při probírce lépe použít Iterator iterator( ) než Enumeration elements( ). PJV 04 14

Array. List • Třída Array. List uchovává reference objektů v poli. Operace size, is. Empty, get, set, add, iterator, a list. Iterator probíhají v konstantním čase, ostatní v lineárním. Konstruktor a dvě metody nastavují kapacitu tj. velikost pole a tím ovlivňují nárok na paměť i četnost a čas realokací. Metoda ensure. Capacity realokuje pole o polovinu větší, trim. To. Size realokuje na stávající velikost. • Třída Linked. List Kolekce objektů je realizována technikou obousměrného spojového seznamu ve kterém se postupně hledá pomocí List. Iteratoru. Příslušné operace mají tedy lineární časovou složitost. Pro synchronizaci je třeba zapouzdřit takto: List list = Collections. synchronized. List( new Array. List( ) ); List list = Collections. synchronized. List( new Linked. List( ) ); PJV 04 15

Stack (zásobník) • Třída Stack (zásobník) je přímý potomek Vectoru s přidanými metodami: Object push ( Object x ) - vloží prvek na vrchol Object pop ( ) - odebere prvek z vrcholu Object peek ( ) - vrátí prvek z vrcholu, ale neodebere boolean empty ( ) int search ( Object x ) - pozice objektu od vrcholu počítaná od 1 Tato třída je stará z verze 1. 0, synchronizovaná a užitečná ač nepatří do JCF. Její vlastní metody nelze využívat pomocí interfejsu List. PJV 04 16

Set a Sorted. Set • Interfejs Set je potomkem Collection Ve sbírce se nesmějí být duplikované prvky ( ve smyslu equals() ) a nanejvýš jedna reference null. Zvláštní pozornost musí být věnována případu jsou-li prvky obsahově proměnné. Tento interfejs nepřidává další metody. • Interfejs Sorted. Set je potomkem Set a Comparator comparator( ) Object first( ) - vrací první (nejmenší) prvek Sorted. Set head. Set( Object to. Element ) - vrací pohled Object last( ) - vrací poslední (největší) prvek Sorted. Set sub. Set( Object from. Element, Object to. Element ) Sorted. Set tail. Set( Object from. Element ) - vrací pohled PJV 04 17

Abstract. Set a její potomci • Třída Abstract. Set přepisuje pouze metody equals( ), hash. Code( ), remove. All( ). Abstraktními stále zůstavají iterator( ) a size ( ). Všichni následující konkrétní potomci jsou nesynchronizovaní. • Třída Hash. Set umožňuje prvek null. Iterátor nezaručuje jakékoli pořadí. Operace jsou zprostředkovány třídou Hash. Map v O(1) čase. • Třída Linked. Hash. Set je potomkem Hash. Set také umožňuje prvek null. Iterátor zaručuje výstup v pořadí vkládání a to i případě reinserce téhož prvku. Operace jsou zprostředkovány třídou Linked. Hash. Map v O(1) čase. • Třída Tree. Set navíc implementuje interfejs Sorted. Set. Zaručuje výstup v rostoucím pořadí objektů ( buď dle Comparable anebo dodaného Comparatoru ). Iterátor zaručuje ryze vzrůstající pořadí. Operace jsou zprostředkovány třídou Tree. Map v O( log n ) čase. PJV 04 18

Map • Interfejs Map definuje abstraktní metody: void clear ( ) boolean contains. Key ( Object key ) boolean contains. Value ( Object value ) Set entry. Set ( ) Object get ( Object key ) boolean is. Empty ( ) Set key. Set ( ) Object put ( Object key, Object value ) void put. All ( Map m ) Object remove ( Object key ) int size ( ) Collection values ( ) Map znamená zobrazení keys -> values, tedy klíčů ( množinu objektů ) na hodnoty ( multimnožinu objektů ). PJV 04 19

Sorted. Map • Interfejs Sorted. Map je potomkem Map a přidává abstraktní metody: Comparator comparator( ) Object first. Key( ) - vrací první (nejmenší) klíč Sorted. Map head. Map( Object to. Key ) - vrací pohled Object last. Key( ) - vrací poslední (největší) prvek Sorted. Map sub. Map( Object from. Key, Object to. Key ) - vrací pohled Sorted. Map tail. Map( Object from. Key ) - vrací pohled PJV 04 20

Abstract. Map • Třída Abstract. Map implementuje interfejs Map, ponechává abstraktní jen metodu entry. Set ( ). Přidává metody: boolean contains. Key ( Object x ) boolean contains. Value ( Object x ) • Třída Hash. Map je konkrétním potomkem třídy Abstract. Map, umožňje null reference, není synchronizovaná. • Třída Hashtable je starší obdobou Hash. Map, splňuje interfejs Map, je však potomkem zastaralé abstraktní třídy Dictionary, neumožňuje null reference, je synchronizovaná. • Třída Properties je potomkem Hashtable, který umožňuje vstup i výstup pomocí proudů (streams). • Třída Tree. Map je konkrétním potomkem třídy Abstract. Map která navíc implementuje interfejs Sorted. Map. Tedy udržuje unikátní klíče ve vzrůstající setříděném posloupnosti. PJV 04 21

Comparator • Interfejs Comparator definuje požadavky, které musí splňovat objekt rozhodující, který ze dvou objektů je větší. Jsou to metody: int compare( Object x, Object y ) - vrací <0, 0, >0 pro x<y, x==y, x>y boolean equals ( Object obj ) - srovnává objekty typu Comparator PJV 04 22

Iterator a List. Iterator • Interfejs Iterator definuje požadavky, které musí splňovat objekt, kterým lze probírat sbírku. Jsou to metody: boolean has. Next ( ) - testuje zda jsou ještě další prvky Object next( ) - podá další prvek void remove( ) – odstraní prvek ze sbírky • List. Iterator je potomkem Iteratoru a přidává požadavky pro sekvenční přístup, přidávání, změny a indexování prvků těmito metodami: boolean Object int void PJV 04 has. Next ( ) - testuje zda jsou ještě další prvky previous( ) - podá další prvek next. Index( ) - index dalšího prvku previous. Index( ) - index dalšího prvku set( Object o ) add( Object o ) 23

String. Tokenizer Další třídy jsou velmi užitečné – nejsou součástí JCF • Třída String. Tokenizer je pomůcka pro separaci řetězu podle zadatelných delimiterů, kterými jsou jednotlivé znaky. Pomocí enumerace ( starší varianta iterátoru ) postupně získáme podřetězy - případně i delimitery. Příklad: String s = " delta = alfa * ( beta + gama ) "; Enumeration en = new String. Tokenizer( s, "=+*() ", true ); while ( en. has. More. Elements( ) ) { String z = (String) en. next. Element( ); if ( z. equals (" ") ) continue; // Zde vrací z postupně od mezer oproštěné řetězy: // delta, =, alfa, *, (, beta, +, gama, ). } PJV 04 24

Bit. Set • Třída Bit. Set slouží k operacím na indexované množině boolevských hodnot ( false / true ). Umožňuje operace AND, ANDNOT, OR, XOR, intersekci, inverzi, výběr podmnožiny, vyhledání nejbližšího prvku dané hodnoty, zjištění kardinality i hromadné modifikace. Množina je dynamicky rozšiřovatelná. PJV 04 25

Zpracování času • UTC čas ( po milisekundách od 1. 1. 1970 ) lze zjistit takto: long t = java. lang. System. current. Time. Millis( ); long t = new Gregorian. Calendar(). get. Time. In. Millis(); long t = Calendar. get. Instance(). get. Time. In. Millis(); • K zacházení s časovými údaji slouží následující třídy: Date - starší třída - značně deprecated. Calendar - abstraktní třída Gregorian. Calendar - konkrétní třída Kalendářové třídy respektují místní čas i zvyklosti ( Time. Zone a Locale ). • Volba jednotlivých údajů se zadává symbolicky - přičemž pozor: SUNDAY=1. . . SATURDAY=7, JANUARY=0. . . DECEMBER=11. Příklad: Calendar cal = Calendar. get. Instance(); // cal zafixuje časové údaje a tiskne: System. out. println( cal. get. Time( ) ); // Sat Mar 06 20: 06: 28 CET 2004 System. out. println( cal. get(cal. MONTH) ); // 2 PJV 04 26

Zpracování času • Časové plánování a spouštění úloh umožňují třídy • Timer a Timer. Task. PJV 04 27
- Slides: 27