Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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,

Podobné prezentace


Prezentace na téma: "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,"— Transkript prezentace:

1 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 hashCode kvůli dodržení uzance, že ekvivalentní objekty musejí mít stejné hash kódy. public int hashCode( ) - 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. PJV04

2 Třída java.lang.Object public final Class getClass( ) - vrací objekt typu Class, čímž lze typ každého objektu přesně identifikovat. public String toString( ) - 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 InterruptedException - tyto metody umožňují zařadit objekt do čekárny. public final void notifyAll( ) - uvolňuje všechny objekty z čekárny. public final void notify( ) - uvolňuje objekt z čekárny. PJV04

3 Třída java.lang.Object protected Object clone( ) throws CloneNotSupportedException - 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(). PJV04

4 Pole (Array) Pole a prvky pole se poznají podle hranatých závorek. K prvkům pole se přistupuje pomocí indexu v rozmezí 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.getClass() 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. PJV04

5 Pole (Array) Příklad: String[ ] s = { "AAA", " BBB", "CCC " };
System.out.println( s.getClass()+" "+Array.getLength(s) ); int [ ][ ] a = new int [ ][ ] { { 333, 666}, {777} }; System.out.println( a.getClass()+" "+Array.getLength(a) ); Vypíše: class [L java.lang.String; 3 class [ [ I 2 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. PJV04

6 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, SortedSet - sbírka unikátních objektů - případně uspořádaná Map, SortedMap - sbírka dvojic (zobrazení) objektů key  value List - indexovaná sbírka objektů Comparator, java.lang.Comparable - pro porovnávání objektů Iterator, ListIterator, RandomAccess - pro přístup k prvkům Abstraktní třídy: AbstractCollection AbstractSet, AbstractMap, AbstractList, AbstractSequentialList PJV04

7 Kolekce (Collection) Třídy: ArrayList, LinkedList
HashSet, LinkedHashSet, HashMap LinkedHashMap TreeSet, TreeMap Vector, Stack, Hashtable, Properties Arrays, Collections Algoritmy pro řazení, přesouvání, doplňování, kopírování a vyhledávaní PJV04

8 Java Collection Framework
jen statické metody Set List Collections Abstract Collection Arrays SortedSet Abstract Set Abstract List ArrayList RandomAccess TreeSet HashSet Abstract Sequential List Vector Linked HashSet Linked List Stack třída abstr. třída interfejs extends implements PJV04 ALG

9 Java Collection Framework
Nepatří do JCF Map Dictionary SortedMap Abstract Map Comparator Hashtable TreeMap HashMap Properties Identity HashMap Linked HashMap Weak HashMap Iterator ListIterator třída abstr. třída interfejs extends implements PJV04

10 Užité techniky interface HT RA BT LL HT+LL
List ArrayList LinkedList Set HashSet LinkedHashSet SortedSet TreeSet Map HashMap LinkedHashMap SortedMap TreeMap HT - hastable - rozmítaná tabulka, RA - resizable array - pole s proměnnou velikostí, BT - balanced tree - vyvážený strom, LL - linked list - spojový seznam. PJV04

11 Collection Interfejs Collection umožňuje jednotlivé i hromadné operace: Dotazy: int size( ) boolean isEmpty( ) boolean contains( Object o ) boolean containsAll( Collection c ) - true, obsahuje-li všechny prvky c Iterator iterator( ) Object[ ] toArray( ) Object[ ] toArray(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 ddAll( Collection c ) boolean removeAll( Collection c ) - odstraňuje všechny patřící do c boolean retainAll( Collection c ) - odstraňuje všechny mimo patřící do c void clear( ) PJV04

12 Collection Třída AbstractCollection 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 ListIterator je potomkem Iteratoru a navíc má metody pro prohlížení oběma směry, získávání indexů a vkládání prvků. Interfejs RandomAccess je pouhý marker. PJV04

13 List Interfejs List je potomkem Collection, který vyžaduje indexovaný přístup k prvkům sbírky void add ( int index, Object element ) boolean addAll ( Collection c ) boolean addAll ( int index, Collection c ) Object get ( int index ) Object set ( int index, Object element ) Object remove (int index ) int indexOf ( Object o ) - hledání zepředu int lastIndexOf ( Object o ) - hledání zezadu ListIterator listIterator ( ) ListIterator listIterator ( int index ) List subList ( int fromIndex, int toIndex ) - pohled PJV04

14 AbstractList Třída AbstractList je potomkem třídy AbstractCollection a interfejsu List. Ta přidává jen metodu protected void removeRange( int, int) a abstraktními jsou jen metody get( int ) a size( ). AbstractList sleduje také modifikace a komodifikace. Má tři přímé potomky: AbstractSequentialList - polotovar pro sekvenční přístup s abstraktními metodami listIterator( int ) a size( ). ArrayList - 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ř.: elementAt( 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( ). PJV04

15 ArrayList Třída ArrayList uchovává reference objektů v poli.
Operace size, isEmpty, get, set, add, iterator, a listIterator 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 ensureCapacity realokuje pole o polovinu větší, trimToSize realokuje na stávající velikost. Třída LinkedList Kolekce objektů je realizována technikou obousměrného spojového seznamu ve kterém se postupně hledá pomocí ListIteratoru. Příslušné operace mají tedy lineární časovou složitost. Pro synchronizaci je třeba zapouzdřit takto: List list = Collections.synchronizedList( new ArrayList( ) ); List list = Collections.synchronizedList( new LinkedList( ) ); PJV04

16 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. PJV04

17 Set a SortedSet 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 SortedSet je potomkem Set a Comparator comparator( ) Object first( ) - vrací první (nejmenší) prvek SortedSet headSet( Object toElement ) - vrací pohled Object last( ) - vrací poslední (největší) prvek SortedSet subSet( Object fromElement, Object toElement ) SortedSet tailSet( Object fromElement ) - vrací pohled PJV04

18 AbstractSet a její potomci
Třída AbstractSet přepisuje pouze metody equals( ), hashCode( ), removeAll( ). Abstraktními stále zůstavají iterator( ) a size ( ). Všichni následující konkrétní potomci jsou nesynchronizovaní. Třída HashSet umožňuje prvek null. Iterátor nezaručuje jakékoli pořadí. Operace jsou zprostředkovány třídou HashMap v O(1) čase. Třída LinkedHashSet je potomkem HashSet 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 LinkedHashMap v O(1) čase. Třída TreeSet navíc implementuje interfejs SortedSet. Zaručuje výstup 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 TreeMap v O( log n ) čase. PJV04

19 Map Interfejs Map definuje abstraktní metody: void clear ( )
boolean containsKey ( Object key ) boolean containsValue ( Object value ) Set entrySet ( ) Object get ( Object key ) boolean isEmpty ( ) Set keySet ( ) Object put ( Object key, Object value ) void putAll ( 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ů ). PJV04

20 SortedMap Interfejs SortedMap je potomkem Map a přidává abstraktní metody: Comparator comparator( ) Object firstKey( ) - vrací první (nejmenší) klíč SortedMap headMap( Object toKey ) - vrací pohled Object lastKey( ) - vrací poslední (největší) prvek SortedMap subMap( Object fromKey, Object toKey ) - vrací pohled SortedMap tailMap( Object fromKey ) - vrací pohled PJV04

21 AbstractMap Třída AbstractMap implementuje interfejs Map, ponechává abstraktní jen metodu entrySet ( ). Přidává metody: boolean containsKey ( Object x ) boolean containsValue ( Object x ) Třída HashMap je konkrétním potomkem třídy AbstractMap, umožňje null reference, není synchronizovaná. Třída Hashtable je starší obdobou HashMap, 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 TreeMap je konkrétním potomkem třídy AbstractMap která navíc implementuje interfejs SortedMap. Tedy udržuje unikátní klíče ve vzrůstající setříděném posloupnosti. PJV04

22 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 PJV04

23 Iterator a ListIterator
Interfejs Iterator definuje požadavky, které musí splňovat objekt, kterým lze probírat sbírku. Jsou to metody: boolean hasNext ( ) - testuje zda jsou ještě další prvky Object next( ) - podá další prvek void remove( ) – odstraní prvek ze sbírky ListIterator 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 hasNext ( ) - testuje zda jsou ještě další prvky Object previous( ) - podá další prvek int nextIndex( ) - index dalšího prvku int previousIndex( ) - index dalšího prvku void set( Object o ) void add( Object o ) PJV04

24 StringTokenizer Další třídy jsou velmi užitečné – nejsou součástí JCF
Třída StringTokenizer 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 StringTokenizer( s, "=+*() ", true ); while ( en.hasMoreElements( ) ) { String z = (String) en.nextElement( ); if ( z.equals (" ") ) continue; // Zde vrací z postupně od mezer oproštěné řetězy: // delta, =, alfa, *, (, beta, +, gama, ) . } PJV04

25 BitSet Třída BitSet 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á. PJV04

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

27 Zpracování času Časové plánování a spouštění úloh umožňují třídy
Timer a TimerTask. PJV04


Stáhnout ppt "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,"

Podobné prezentace


Reklamy Google