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

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

PJV041 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: "PJV041 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 PJV041 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.

2 PJV042 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.

3 PJV043 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().

4 PJV044 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.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.

5 PJV045 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.

6 PJV046 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

7 PJV047 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í

8 PJV048 Linked HashSet SetList třída abstr. třída interfejs Java Collection Framework extendsimplements Abstract Collection Abstract Set Abstract List Abstract Sequential List Vector Stack SortedSet HashSetTreeSet ArrayList Linked List RandomAccess Collections Arrays jen statické metody

9 PJV049 HashMap SortedMap třída abstr. třída interfejs Java Collection Framework extendsimplements Abstract Map HashtableTreeMap Linked HashMap Identity HashMap Weak HashMap Dictionary Comparator Iterator ListIterator Properties Nepatří do JCF

10 PJV0410 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. Užité techniky

11 PJV0411 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( )

12 PJV0412 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.

13 PJV0413 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

14 PJV0414 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( ).

15 PJV0415 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( ) );

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

17 PJV0417 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

18 PJV0418 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.

19 PJV0419 MapMap •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ů ).

20 PJV0420 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

21 PJV0421 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.

22 PJV0422 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 pro x y boolean equals ( Object obj ) - srovnává objekty typu Comparator

23 PJV0423 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 )

24 PJV0424 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, ). }

25 PJV0425 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á.

26 PJV0426 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=0... 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

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


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