Pole ( Array ) p2[1] = new Point(5, 6); // assignment PJV04 1

Podobné dokumenty
Programování v jazyku Java pole, kolekce, typované kolekce

boolean hasnext() Object next() void remove() Kolekce

7. Dynamické datové struktury

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Kolekce. BD6B36PJV 5 Fakulta elektrotechnická České vysoké učení technické

typová konverze typová inference

Kolekce, cyklus foreach

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

6. Problém typové anonymity prvků v kolekci Sjednocení typově rozdílných prvků pomocí rozhraní Kolekce pro jeden typ prvků...

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

JAVA. java.lang.stringbuffer java.lang.stringbuilder

Úvod do programovacích jazyků (Java)

Abstraktní datové typy: zásobník

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Výčtové typy a kolekce v Javě, generické typy

Šablony, kontejnery a iterátory

Výčtové typy a kolekce v Javě, generické typy

Výčtové typy Kolekce a JFC Iterátory Přehled JFC Generické typy

Výčtové typy Kolekce a JFC Iterátory Přehled JFC Generické typy Příklad - Spojový seznam

Java - řazení objektů

Základní datové struktury

Seminář Java IV p.1/38

Typický prvek kolekce pro české řazení

Výčtový typ strana 67

JAVA. java.lang.system

Šablony, kontejnery a iterátory

ADT/ADS = abstraktní datové typy / struktury

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Java Enum Java, zimní semestr ,2017 1

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Abstraktní datové typy

PB161 Programování v jazyce C++ Přednáška 3

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Teoretické minimum z PJV

Datové struktury strana 81

Návrhové vzory Tvorba objektů

Seminář Java V p.1/49

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Datové struktury. alg12 1

Část I Spojové struktury

Dynamické datové struktury I.

Implementace abstraktních datových typů. Zásobník (Stack) Fronta (Queue) Obousměrná fronta (Dequeue) Vektor (Vector) Seznam (List)

11. Dědičnost. Dědičnost strana 103

Iterator & for cyklus

Dynamické datové struktury IV.

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Lineární datové struktury

Da D to t v o é v ty t py IB111: Datové typy

Spojové struktury. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 10 A0B36PR1 Programování 1

Konstruktory a destruktory

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

JAVA. Krátke poznámky:

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Principy objektově orientovaného programování

9. přednáška - třídy, objekty

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Programování v C++ 2, 4. cvičení

Design time - vytváří se program - metadata - vytváří se např. třída. Run time - běh programu - ukládá se do paměti počítače - vytváří se např.

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Generické programování

PŘETĚŽOVÁNÍ OPERÁTORŮ

PB161 Programování v jazyce C++ Přednáška 3

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Java a XML. 10/26/09 1/7 Java a XML

Abstraktní datové typy

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

Programování v C++ 1, 5. cvičení

Zadání k 2. programovacímu testu

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

8 Třídy, objekty, metody, předávání argumentů metod

Lineární datové struktury

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

Pole a kolekce. v C#, Javě a C++

Programování v Javě I. Leden 2008

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

Tvorba objektů. Nový objekt se vytváří konstruktorem a event. nestatickými inicializátory.

Obsah přednášky. Výjimky, výčtové typy a kolekce v Javě. Nestandardní situace. Výjimky (Exceptions)

Výjimky, výčtové typy a kolekce v Javě

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

20. Projekt Domácí mediotéka

Jazyk C# (seminář 3)

Abstraktní třída a rozhraní

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

Dynamické struktury a Abstraktní Datový Typy (ADT)

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Vytváření a použití knihoven tříd

Část 1 Spojové struktury (stromy) Dynamické struktury a Abstraktní Datový Typy (ADT) Část 2 Abstraktní datový typ. Část 3 Příklad ADT Prioritní fronta

Programování v Javě I. Únor 2009

Návrh softwarových systém. Návrh softwarových systémů

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Spojová implementace lineárních datových struktur

prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Transkript:

Pole ( Array ) Pole je také objekt mající typ a tudíž se konstruuje na haldě. Typy prvků pole musí být kompatibilní s typem pole. Mohou to být primitivy anebo reference dle toho se defaultně inicializují na příslušné nuly či falseči null. Každé pole lze referovat typem java.lang.object. Neměnnou délku pole určuje jeho atribut public final int length >=0. Pole a prvky pole se poznají právě dle hranatých závorek vyjadřujících dimensionalitu pole. Dimensionalita má rozsah 1 255. Prvky pole jsou přistupné pomocí indexu v mezích 0... pole.length-1, jinak vznikne vyjímka java.lang.arrayindexoutofboundsexception. Příklady jednorozměrných polí: int[ ] a = { 1, 2, 3 }; int[ ] b = new int[ 10 ]; // initialized by 0 String[ ] s = { "A", "BB", "CCC" }; // homogen. Object[ ] p0 = new Point[ 5 ]; // initialized by null Object[ ] p1 = { new Long(1), "CCC", new Short(0) }; // heterogen. Point[ ] p2 = { new Point(1, 2), new Point(3, 4), }; int len = p2.length; // get array length p2[1] = new Point(5, 6); // assignment PJV04 1

non-static context garbage collected heap Pole Object.class static context class loader non-static general methods: Serializable.class clone( ), equals(, hashcode( ), finalize( ), getclass( ), notify( ), int [ ] a int [ ] z=null Cloneable.class notifyall( ), tostring( ), wait( ) int [ ] final int length 0 1. length-1 PJV04 2

java.util.arrays Tato třída poskytujeřadu statických metod usnadňujících práci s jednorozměrnými poli. Metody jsou zpravidla přetížené pro různé typy. aslist pro převod do kolekce binarysearch hledání v seřazeném poli či jeho části copyof, copyofrange kopie pole dle zadané délky a i s přetypováním deepequals deephashcode deeptostring - výpis pole i vícedimezionálního equals test ekvivalence fill vyplnění všech položek danou hodnotou hashcode výpočet pro pole sort vzestupnéřazení, případně dle zadaného komparátoru tostring výpis pole PJV04 3

Vícedimensionální pole Tvoří se skládáním jednodimensionálních - a nemusejí být rektangulární. Příklady: int[ ][ ] aa = new int[10][5]; // rectangular matrix 10 rows 5 cols int[ ][ ] bb = { {1}, {2, 3}, {4, 5, 6} }; // triangle matrix with 3 rows int len = bb[1].length; // length of second row is 2 bb[2][1] = 9; // assign 9 (old value was 5) bb[1] = null; // second row does not exist Point[ ][ ] pp = { { new Point(0,0), new Point(1,1), null }, }; { new Point(2,2) }, null, RTTI umožňuje určit typ pole a jeho dimensionalitu dle přiřazeného písmena a počtu otvíracích hranatých závorek takto: - pro primitivní pole: B, S, C, I, J, F, D, Z pro byte, short, char, int, long, float, double, boolean - pro referenční pole: L a úplným jménem třídy. PJV04 4

Pole ( Array ) Pomocí metody getclass( ) lze zjistit vlastnosti pole. Rafinované triky nabízí třída java.lang.reflect.array, která umožňuje dynamicky vytvářet a modifikovat pole. 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 Velmi užitečná 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. PJV04 5

Kolekce Je sbírka objektů v operační paměti, organizovaná dle JCF ( Java Collection Framework ). JCF sídlí v balíčku java.util a zahrnuje zejména: Interfejsy: Collection - sbírka objektů Set, SortedSet - sbírka unikátních objektů příp. uspořádaná Map<K,V>, SortedMap <K,V> - sbírka dvojic (zobrazení) objektů key value - příp. uspořádaná List - indexovaná sbírka objektů Queue - fronta ( FIFO ) Comparator<T>, 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 6

Kolekce Třídy: ArrayList, LinkedList HashSet, LinkedHashSet, HashMap, LinkedHashMap TreeSet, TreeMap Vector, Stack, Hashtable, Properties PriorityQueue, ArrayDeque Arrays, Collections Algoritmy pro řazení, přesouvání, doplňování, kopírování a vyhledávání Třídy *Hash* vyžadují vhodnou konstrukci funkce hashcode( ). Ta původní z třídy Objekt dává vždy různé kódy proto je nevhodná. PJV04 7

java.lang Iterable SortedSet Set Collection List Service Loader <S> 1.6 RandomAccess NavigableSet 1.6 Abstract Set Abstract Collection Abstract List ArrayList TreeSet Abstract Queue Queue Vector synch HashSet Linked HashSet EnumSet java.util.concurrent Priority Queue Array Deqeue 1.6 Deque 1.6.concurrent Blocking Deque Abstract Sequential List Linked List Stack synch Nepatří do JCF PJV04 8

Properties Hashtable Map <K,V> Abstract Map <K,V> synch <K,V> HashMap TreeMap <K,V> <K,V> Nepatří do JCF Dictionary SortedMap Navigable Map 1.6 <K,V> <K,V> javax.script Bindings javax.xml.ws.handler Message Context Logical Message Context SOAPMessage Context Arrays binarysearch equals, fill, sort Collections binarysearch checked, sort... Map.Entry <K,V> AbstractMap. SimpleEntry AbstractMap. Simple ImmutableEntry Linked HashMap <K,V> Weak HashMap <K,V> Identity HashMap <K,V> Enum Map.concurrent Concurrent SkipListMap.concurrent Concurrent HashtMap.concurrent Concurrent NavigableMap.concurrent Concurrent Map Comparator <T> java.text Collator PJV04 9

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

Interfejs Collection extends Iterable Interfejs Collection je základem seznamů (list) a množin (set). Umožňuje jednotlivé i hromadné operace pro dotazy, převody a modifikace. Metody pro plnění kolekce: boolean add( E o ) vložení jednoho prvku boolean addall( Collection<? extends E > c ) vložení všech prvků nacházejících se v jiné kolekci Metody pro ubírání z kolekce: void clear( ) vyloučení všech prvků z kolekce boolean remove( Object o ) odstranění jednoho prvku z kolekce boolean removeall( Collection <?> c ) - odstraní všechny patřící do c boolean retainall( Collection <?> c ) - odstraní všechny mimo patřící do c Dynamické vlastnosti kolekcí: int boolean boolean boolean size( ) vrátí aktuální počet prvků kolekce isempty( ) test na prázdnou kolekci contains( Object o ) test, zda je obsažen prvek o containsall( Collection <?> c ) - true, když obsahuje všechny prvky c PJV04 11

Interfejs Collection extends Iterable Získání přístupového objektu: Iterator iterator( ) vrátí objekt pro probírku sbírky Převod kolekce na běžné pole: Object[ ] toarray( ) převod na pole typu Object <T> T [ ] toarray( T [ ] a ) - vytvoří pole konkrétního typu PJV04 12

Collection Třída AbstractCollection implements 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 extends Iterator, 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

Interfejs List extends Collection Vyžaduje indexovaný přístup k prvkům sbírky. Přidává metody, které zavádějí možnost práce s prvky kolekce pomocí indexů. Změny v kolekci: void add ( int index, E element ) přidání prvku (prvky se stejným a vyššími indexy budou posunuty o jeden výše) boolean addall ( Collection <? extends E > c ) přidá prvky z c boolean addall ( int index, Collection <? extends E > c ) E set ( int index, E element ) změna prvku na daném indexu E remove ( int index ) odstranění prvku; prvky s vyšším indexem budou posunuty o jeden níže Získání obsahu kolekce: E int int get ( int index ) vrátí prvek s daným indexem indexof ( Object o ) - hledání zepředu lastindexof ( Object o ) - hledání zezadu List sublist ( int fromindex, int toindex ) - vrátí podseznam PJV04 14

Interfejs List extends Collection Získání přístupového objektu: ListIterator listiterator ( ) ListIterator listiterator ( int index ) Ostatní: boolean equals ( Object o ) porovnání seznamů PJV04 15

Třída AbstractList extends AbstractCollection a implements List. Přidává jen metodu protected void removerange( int, int ) a abstraktní má 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 stará, synchronizovaná třída - od verze 1.2 redefinovaná. Některé původní metody mají nově, systematičtěji nazvané ekvivalenty, např.: elementat( int ) má nový ekvivalent 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 16

ArrayList a LinkedList 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 dobu relokací. ArrayList(int pocatecnikapacita) přednastaví seznam na pož. kapacitu ensurecapacity( ) realokuje pole o polovinu větší. trimtosize( ) redukuje rozsah na stávající velikost. Třída LinkedList implements Queue, Deque 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 17

Třída Stack extends Vector Zásobník přidává metody: E push ( E item ) - vloží prvek na vrchol. E pop ( ) - odebere prvek z vrcholu. E peek ( ) - vrátí prvek z vrcholu, ale neodebere. boolean empty ( ) int search ( Object x ) - pozice objektu od vrcholu počítaná od 1 Tato stará, synchronizovaná třída je užitečná - ač nepatří do JCF a tedy její vlastní metody nelze využít interfejsem List. Od verze 1.6 se doporučuje používat třídy splňující interfejs Deque, tj.: ArrayDeque, LinkedList, LinkedBlockingDeque. PJV04 18

Interfejsy Set, SortedSet, NavigableSet Set extends Collection V množině nesmějí být duplikované prvky ( podle equals() ) a nanejvýš jedna reference null. Zvláštní pozornost zasluhuje případ jsou-li prvky obsahově proměnné. Tento interfejs nepřidává další metody. SortedSet extends Set a přidává metody: Comparator<? super E> comparator( ) E first( ) - vrací první ( nejmenší ) prvek SortedSet headset( E toelement ) - vrací pohled E last( ) - vrací poslední ( největší ) prvek SortedSet subset( E fromelement, E toelement ) SortedSet tailset( E fromelement ) - vrací pohled NavigableSet extends SortedSet a přidává metody: ceiling( ), floor( ), higher( ), lower( ) descendingiterator( ), descendingset( ) pollfirst( ), polllast( ) PJV04 19

Třída AbstractSet a její potomci AbstractSet přepisuje pouze metody equals( ), hashcode( ), removeall( ). Abstraktními zůstávají iterator( ) a size ( ). Všichni následující konkrétní potomci jsou nesynchronizovaní. Třída HashSet umožňuje prvek null. Iterátor nezaručuje pořadí. Operace jsou zprostředkovány třídou HashMap v O(1) čase. Třída LinkedHashSet extends HashSet a také umožňuje prvek null. Iterátor zaručuje výstup v pořadí vkládání i v 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. Iterátor zaručuje výstup v pořadí objektů buď dle Comparable anebo dodaného Comparatoru. Operace jsou zprostředkovány třídou TreeMap v čase O( log n ). PJV04 20

Interfejsy pro fronty Queue a Deque Interfejs Queue extends Collection. Přidává obdobné metody s mírně jiným chováním: vyhazují vyjímky vracejí spec. hodnotu vložení boolean add( E e ) boolean offer( E e ) odstranění E remove( ) E poll( ) přístoupení E element( ) E peek( ) Interfejs Deqeue extends Queue. Přidává zásobníkové metody: E pop( ) void push( E e ) E getfirst( ) void addfirst( E e ) E peekfirst( ) E getlast( ) void addlast( E e ) E peeklast( ) PJV04 21

Třída PriorityQueue PriorityQueue extends AbstractQueue. Elementy jsou ve frontě dynamickyřazeny buď podle přirozeného pořadí anebo podle dodaného komparátoru. boolean add( E e ) boolean addall( Collection<? extends E> e ) boolean contains( Object o) boolean offer( E e ) E remove( ) boolean remove( Object o ) E poll( ) E peek( ) E element( ) void clear( E e ) PJV04 22

Interfejs Map < K, V > Map znamená zobrazení keys -> values, tedy klíčů ( množinu objektů ) na hodnoty ( multimnožinu objektů ) a definuje metody: void clear ( ) boolean containskey ( Object key ) boolean containsvalue ( Object value ) Set <Map.Entry<K,V>> entryset ( ) V get ( Object key ) boolean isempty ( ) Set<K> keyset ( ) V put ( K key, V value ) void putall ( Map<? extends K,? extends V > m ) Object remove ( Object key ) int size ( ) Collection values ( ) PJV04 23

Interfejsy SortedMap<K,V> a NavigableMap<K,V> SortedMap extends Map - přidává metody pro uspořádané zobrazení: Comparator<? super K> comparator( ) K firstkey( ) - vrací první ( nejmenší ) klíč SortedMap<K,V> headmap( Object tokey ) - vrací pohled K lastkey( ) - vrací poslední ( největší ) prvek SortedMap<K,V> submap( K fromkey, K tokey ) - vrací pohled SortedMap<K,V> tailmap( K fromkey ) - vrací pohled NavigableMap extends SortedMap - přidává metody pro lepší navigaci: ceilingentry( ), floorentry( ), higherentry( ), lowerentry( ) ceilingkey( ), floorkey( ), higherkey( ), lowerkey( ) firstentry( ), lastentry( ) descendingkeyset( ), descendingmap( ), navigablekeyset( ) pollfirstentry( ), polllastentry( ) PJV04 24

Třída AbstractMap implements interfejs Map, ponechává abstraktní jen metodu keyset ( ). Přidává metody: boolean containskey ( Object x ) boolean containsvalue ( Object x ) Konkrétní třída HashMap extends AbstractMap, umožňuje 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á. Konkrétní třída Properties je potomkem Hashtable, která umožňuje vstup i výstup pomocí proudů ( streams ). Konkrétní třída TreeMap extends AbstractMap implements SortedMap. Udržuje unikátní klíče v pořadí objektů buď dle Comparable anebo dodaného Comparatoru. PJV04 25

Interfejs Comparator < T > definuje požadavky na objekt rozhodující, který ze dvou objektů je větší. Jsou to metody: int compare( T x, T y ) - vrací <0, 0, >0 pro x<y, x==y, x>y boolean equals ( Object obj ) - srovnává objekty typu Comparator Příklad: public class PriceComparator implements Comparator { int compare( Object x, Object y ) { Priceable a = (Priceable) x, b = (Priceable) y; float diff = a.getprice( ) - b.getprice( ); if ( diff > 0 ) return 1; if ( diff < 0 ) return -1; return 0; } } PJV04 26

Interfejsy Iterator a ListIterator Iterator požaduje metody pro objekt, kterým lze probírat sbírku: boolean E void hasnext ( ) - testuje zda jsou ještě další prvky next( ) - podá další prvek remove( ) odstraní prvek ze sbírky ListIterator extends Iterator s dodatečnými požadavky pro sekvenční přístup, přidávání, změny a indexování prvků metodami: boolean hasnext ( ) - testuje zda jsou ještě další prvky E previous( ) - podá předchozí prvek int nextindex( ) vrátí index dalšího prvku int previousindex( ) vrátí index předchozího prvku void set( E e ) void add( E e ) Modifikace sbírky při užívání iteratorů vede k ConcurrentModificationExc. PJV04 27

Příklad: frekvenční statistika (1/3) Definice dosti obecné položky s čítačem výskytů: public class Item { private String key; private int count = 1; public Item( String key ) { this.key = key; } public String getkey( ) { return key; } public int getcount( ) { return count; } public int add( ) { return ++count; } public int add( int any ) { return count += any; } } public String tostring( ) { return "Item " + key + ": " + count; } PJV04 28

Příklad: frekvenční statistika (2/3) static Map <String, Item> map = new TreeMap <String, Item> ( );... enter("a"); enter("a"); enter("bb");... Set ks = map.keyset( ); System.out.println( ks ); System.out.println( map ); Item item = (Item) map.get("a"); public static void enter( String key ) { if ( map.containskey( key ) ) { ( (Item) map.get( key ) ).add( ); } else map.put( key, new Item( key ) ); } Zadáním parametrických typů není třeba přetypovávat. PJV04 29

Příklad: frekvenční statistika (3/3) static Map <String, Item> map = new TreeMap <String, Item> ( ); int total = 0; // Výpis relativních četností for ( Item it : map.values( ) ) total += it.getcount( ); for ( Map.Entry< String, Item> e : map.entryset( ) ) System.out.println( e.getkey( )+" "+ (double) e.getvalue( ).getcount( ) / total ); Zadáním parametrických typů není třeba přetypovávat. PJV04 30