Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín



Podobné dokumenty
LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

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

5 Rekurze a zásobník. Rekurzivní volání metody

Jazyk C# (seminář 6)

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Vector datový kontejner v C++.

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

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

přetížení operátorů (o)

20. Projekt Domácí mediotéka

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

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

7. Dynamické datové struktury

Teoretické minimum z PJV

7. Datové typy v Javě

Programování v Javě I. Leden 2008

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ , 5.1 a 5.2 8/14

Programování. Debugging a testování. Martin Urza

6. Příkazy a řídící struktury v Javě

Projekty pro výuku programování v jazyce Java

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Standardní algoritmy v C++.

Predispozice pro výuku IKT (2015/2016)

Operační systémy Linux, Mac OS X a jejich srovnání

Úvod do programování - Java. Cvičení č.4

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Gymnázium, Praha 6, Arabská 14. Loydova patnáctka. Dokumentace ročníkového projektu. Předmět: Programování Vyučující: Ing. Tomáš Obdržálek Třída: 1.

Návod na práci s redakčním systémem webu VPŠ a SPŠ MV v Praze

Datové struktury. alg12 1

Programování II. Návrh programu I 2018/19

Ukazatele, dynamická alokace

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Rámcový manuál pro práci s programem TopoL pro Windows

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

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

Kolekce, cyklus foreach

VAR-NET INTEGRAL Manuál správce VNI 5.1 VAR-NET INTEGRAL. verze 0.2. Manuál správce VNI 5.1

Úvod do objektově orientovaného programování s použitím jazyka C# pro střední školy

Pokročilé schopnosti OOP

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

OOPR_05. Případové studie

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132

Vstupní a vstupní proudy v C++

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

PREPROCESOR POKRAČOVÁNÍ

Tvorba geometrického modelu a modelové sítě.

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.

6 Příkazy řízení toku

JSR tutorial 2 Transformace v JSR-184

Výčtový typ strana 67

Nerovnice s neznámou pod odmocninou

Abstraktní datové typy: zásobník

Úvod do PHP s přihlédnutím k MySQL

17. Projekt Trojúhelníky

1. série. Pohádky. Téma: Datumodeslání:

Šablony, kontejnery a iterátory

Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní x Interfejs.doc, verze , uloženo čt :44 1z 55. Rozhraní. interface (interfejs)

Pokročilejší programování v MS Visual Basic 2010

Úvod do programovacích jazyků (Java)

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Mělká a hluboká kopie

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

SMÍCHOVINY. Časopis, který se umí smát.. Časopis J&G Společnosti. Úvod aneb pár slov na začátek

MenuLIB KNIHOVNA SIMPLE4 PRO TVORBU UŽIVATELSKÉHO ROZHRANÍ NA PLC MICROPEL

Soubor jako posloupnost bytů

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

StatSoft Odkud tak asi je?

Typický prvek kolekce pro české řazení

Seminární práce z fyziky stručné pokyny

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

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

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Obří prvky: jak postavit větší kostky

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

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

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

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

3. Třídy. Základní pojmy objektového programování. Třídy

Popis prostředí MOSAIC Programové prostředí MOSAIC nastavení prostředí. Po spuštění Mosaiku se objeví okno Výběr skupiny projektů

IRAE 07/08 Přednáška č. 7. Začátek (head)

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

Přehled probírané látky

Teorie množin. kapitola 2

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Z. Kotala, P. Toman: Java ( Obsah )

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

Sada 1 - Základy programování

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

POLE. - datová struktura ze složek stejného typu, ke kterým se přistupuje pomocí indexů

typová konverze typová inference

Programujeme v softwaru Statistica - příklady

Návrhové vzory Design Patterns

Šablony, kontejnery a iterátory

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Transkript:

Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit naznačit základní práci s ním. Pokud vám zde něco chybí, určitě další odpovědi najdete v dokumentaci Javy nebo v knize Java - Bohatství knihoven Pavla Herouta. Import První věcí, co budeme potřebovat, je ve své třídě, kde s ArrayListem budeme pracovat, zdělit překladači, ž ebudeme používat třídu ArrayList nacházející se v balíčku java.util. To uděláme následujícím způsobem: import java.util.arraylist; Důležité je to uvést ještě před hlavičku samotné třídy. Teď už překladač bude vědět, že když používáme třídu ArrayList, myslíme tím právě tu z java.util. Toto není povinné, ale museli by jsme pak všude psát java.util.arraylist, zatímco takto stačí již dále psát jenom ArrayList. Deklarace proměnných Práci s ArrayListem si budeme ukazovat na instančních proměnných, ale stejně tak by to platilo pro lokální proměnné. První věcí, co musíme udělat, než s nějakou instanční proměnnou začneme pracovat, je ji deklarovat. Řekneme překladači, jakého bude typu (v našem případě ArrayList) a jak jí budeme říkat (třeba list). Poté se v programu již uvádí pouze její jméno (v našem př. list), překladač už ví, že je to ta proměnná, kterou jsme deklarovali. private ArrayList list; Od verze Javy 5.0 (1.5 původního číslování) je k dipozici tzv. typový ArrayList. V této verzi říkáme překladači, jakého typu budou objekty, které do ArrayListu (do proměnné) ukládáme (v původní verzi se ukládaly Objekty a pak bylo nutné Objekt zpět přetypovat). Předpokládejme pro náš příklad, že budeme ukládat řetězce. private ArrayList<String> list; Vytvoření prázdné kolekce Důležitou věcí, než začneme s kolekcí pracovat, je vytvoření samotného objektu kolekce. To uděláme pomocí konstruktoru ArrayListu. (Aby se to trochu pletlo, tak většinou tento úkon je součástí konstruktoru naší vytvářené třídy ;-)) list = new ArrayList();... v případě netypového ArrayListu nebo...

list = new ArrayList<String>();... v případě typového ArrayListu. Počet prvků v kolekci Docela často se nám stane, že bychom rádi věděli, kolik máme vlastně v naší kolekci uložených prvků. Na to slouží metoda size(). int pocet = list.size(); V našem příkladě by jsme v lokální proměnné pocet (právě jsme si ji vytvořili) měli počet prvků, které máme uložené v kolekci list. Pokud by tam nic nebylo, dostali bychom samozřejmě číslo nula. Přidání prvku do kolekce Jedním z prvních úkonů, který jistě budete chtít udělat, je nějaký prvek vložit. K tomu slouží metoda add(). Uvedu zde pouze tu základní verzi. Předpokládejme, že máme nějaký objekt (v př. se jmenuje retezec), který chceme do kolekce přidat. Pak to bude vypadat následovně: list.add(retezec); Daný objekt se přidá na konec kolekce. Možná se ptáte, kolik můžeme nandat objektů do naší kolekce. Je to libovolný počet, dokud nám nedojde paměť. Získání objektu z kolekce Když jsme do kolekce nějaké objekty naskládali, určitě je někdy budeme chtít zpět (mimo jiné proto, že dokud jsou v kolekci, tak s nimi nemůžeme přímo pracovat). K tomu máme metodu get() (dá se použít i metoda remove(), viz. dále). Jako parametr se uvádí index objektu (Tady by se mohl stát kámen úrazu pro některé programátory. Jak jej zjistím. Metod je celá řada a liší se případ od případu. To je na celé téma, takže budu předpokládat, že jej známe.). String retezec = (String)list.get(2);... v případě netypového ArrayListu (nutnost přetypování) nebo... String retezec = list.get(2);... v případě typového ArrayListu (bez přetypování). Parametr metody get musí být z intervalu <0, počet prvků - 1>. Pokud by byl mimo tento interval, metoda vyvolá vyjímku a dojde k havárii programu. Smazání objektu v kolekci Čas od času se stane, že některý objekt už v kolekci nechceme. Pak jej prostě potřebujeme odstranit. Na to slouží metoda remove(). Jako parametr má opět index objektu.

list.remove(2); Důležité je si uvědomit, že pokud jsme neodebírali z konce, dojde ke změně indexů všech prvků za odebraným objektem, protože se třída ArrayList snaží nemít žádné díry. Metoda remove() nám ale zároveň s odstraněním objektu vrací i odkaz na tento objekt, podobně jako metoda get(). To se občas může hodit. Např. když prvek potřebujeme, ale zároveň ho už nechceme mít v naší kolekci. String retezec = (String)list.remove(2);... v případě netypového ArrayListu (nutnost přetypování) nebo... String retezec = list.remove(2);... v případě typového ArrayListu (bez přetypování). Vyčistění kolekce Čas od času potřebujeme naší kolekci prostě vysypat a začít od začátku. Na rychlé vymazání slouží metoda clear(). (pozn. můžeme to i udělat pomocí příkazu remove() tak, že postupně odstraníme položku po položce, ale je to pomalejší) list.clear();

Pohádka o cyklech - neboli cyklická :-) napsal tokos Co je to cyklus Cyklem nazýváme jistou sadu příkazů pevně ohraničenou, kterou potřebujeme v programu opakovat. Klasicky, pro každý prvek seznamu, či pole dělej nějakou činnost(porovnej, vytiskni...). Cyklus musíme vymezit i přesnou podmínkou. Opakuj cyklus dokud platí, nebo dokud neplatí "nějaký výraz". Nyní si rozebereme jednotlivé cykly: Cyklus FOR For cyklus je asi nejpoužívanější a nejoblíbenější konstrukce cyklu. Využíváme ho všude tam, kde předem známe přesný počet opakování cyklu. Zde vidíme jeho přesnou syntaxi. Deklarujeme a definujeme proměnnou cyklu - ono int i. Poté definujeme jednoznačnou podmínku, dokud i je větší než nula. Na závěr přidáme změnu proměnné cyklu, která se provede vždy na konci jednoho cyklu. Tedy po každém provedení cyklu na jeho konci sniž hodnotu i o jedničku. Do těla cyklu můžeme napsat v podstatě cokoliv, to nás teď příliš nezajímá. for(int i=10;i>0;i--) {... Spočítáme tedy, kolikrát se takto zapsaný cyklus provede. Provede se přesně desetkrát, skončí na i=1, i=0 už neprovede, protože jsme zadali ostrou nerovnost. Proměnnou cyklu (i) často využíváme v těle cyklu, například při průchodu polem, kde potřebujeme přistupovat do pole podle indexů. V těle cyklu pak pracujeme s proměnnou i: { pole[i]=0; Vidíme, že pro prvek pole s indexem i se provede přiřazení. Tedy se tento prvek číselného pole upraví na nulu. Cyklus WHILE Cyklus while se používá tam, kde nám nestačí for, kde neznáme přesný počet opakování, definujeme pouze podmínku: int i=10; while(i>0){ i--;

Takto zapsaný cyklus while nám funguje stejně jako předchozí cyklus for. S tím rozdílem, že na začátku testuje VSTUPNÍ podmínku i>0. Proměnnou i ale musíme deklarovat a definovat mimo podmínku. Stejně tak určujeme nastavení i-- po provedení jednoho opakování. A to přímo v těle cyklu. Pro tento konkrétní příklad by tedy bylo lepší použít přímo cyklus for. Cyklus while nám poslouží například zde: //mame vytvoreny iterator it nejake kolekce např. typu ArrayList. while(it.hasnext()) {...=it.next(); Zde přesně nevíme kolikrát se cyklus bude provádět. Nezjistili jsme si přesný počet míčků v kolekci. Tedy provádíme cyklus dokud ještě nějaké míčky v kolekci jsou. Dokud má daný míček(zastoupený iterátorem) svého následovníka. V těle cyklu pak tohoto následovníka přiřadíme do nějaké proměnné, vybereme ho z kolekce, abychom s ním mohli dále pracovat. Stejně tak by se dal v takovéto podobné situaci využít i cyklus for. To bychom ale museli mít trochu upravený vlastní ArrayList, spíše svůj vlastní Seznam. Kde by každý míček měl instanční proměnnou například další, která by v seznamu ukazovala na dalšího následovníka v seznamu pomocí reference-odkazu na objekt. K tomu všemu bychom museli také definovat v našem seznamu jistý první prvek(míček) - první. Hlavička cyklu for by pak vypadala následovně: for(micek x=prvni;x!=null;x=x.dalsi) { x.getcislo(); //jakákoliv metoda z třidy Micek x. Cyklus tedy pracuje takto. Na začátku se přiřadí do proměnné cyklu x první míček ze seznamu. Podmínka cyklu se dá přečíst jako: Prováděj dokud proměnná x.dalsi není null, tedy nemá prázdný odkaz(což znamená, dokud má x svého následovníka). Na konci každého opakování cyklu se pak přiřadí do aktuálního x hodnota odkazu na další míček v seznamu a znovu se provede cyklus. Samozřejmě zde nepoužíváme oficiální iterátor, na pochopení seznamů je ale lepší naprogramovat si svůj vlastní seznam a vyzkoušet si takovéto metody s cykly na jeho procházení. (Brzy dodám příklad kódu pro takovýto jednoduchý seznam.) Cyklus DO WHILE Tento cyklus má podobné použití jako cyklus while s jedním hlavním rozdílem. Podmínka cyklu se netestuje hned na začátku jako u WHILU, ale až na konci, po provedení těla cyklu. Což znamená, že cyklus do while se provede VŽDY alespoň jednou! Tohoto jevu se dá využít třeba u ošetřování zadávání proměnných na konzoli. Uživatel zadává například nějaké číslo. Tedy jednou opakování proběhnout musí. Zadá číslo, na konci se provede test podmínky - pokud je číslo zadané správně, cyklus končí, pokud ne, cyklus pokračuje znovu(uživatel zadává špatně zadané číslo znovu). Syntaxe DO WHILE: do { while(i>0); Vtip spočívá v tom, že tento cyklus se provede i v případě pokud by na začátku bylo i menší než nula. Cyklus by se jednou provedl a až na konci by zjistil, že i je menší než nula a skončil by.