Java: Kontejnery
Z MiS
(Rozdíly mezi verzemi)
(Doplněny rozhraní List, doplněno, že do kontejnerů lze ukládat jen objekty, nový úkol s čísly.) |
m (→Úkol 1: Oprava překlepu) |
||
| (Není zobrazeno 5 mezilehlých verzí od 1 uživatele.) | |||
| Řádka 16: | Řádka 16: | ||
; Vytvoření kontejneru | ; Vytvoření kontejneru | ||
| + | * Vytvoření ArrayListu pro ukládání objektů třídy <code>Predmet</code> zapíšeme: | ||
List<''Predmet''> ''kontejner'' = new ArrayList<>(); | List<''Predmet''> ''kontejner'' = new ArrayList<>(); | ||
| − | * Ve starých verzích Javy bylo nutno psát název třídy dvakrát — i tento zápis můžete potkat: | + | * Ve starých verzích Javy (před verzí 8) bylo nutno psát název třídy dvakrát — i tento zápis můžete potkat: |
List<''Predmet''> ''kontejner'' = new ArrayList<''Predmet''>(); | List<''Predmet''> ''kontejner'' = new ArrayList<''Predmet''>(); | ||
| Řádka 35: | Řádka 36: | ||
int ''kontejner''.size(); | int ''kontejner''.size(); | ||
boolean ''kontejner''.isEmpty(); | boolean ''kontejner''.isEmpty(); | ||
| − | |||
== Procházení kontejneru == | == Procházení kontejneru == | ||
| Řádka 43: | Řádka 43: | ||
* Zapisujeme: | * Zapisujeme: | ||
'''for''' (''Prvek'' ''nazevPromenne'' : ''kontejner'') { | '''for''' (''Prvek'' ''nazevPromenne'' : ''kontejner'') { | ||
| − | ... ''Práce s konkrétním prvkem (je v proměnné nazevPromenne)''... | + | // ... ''Práce s konkrétním prvkem (je v proměnné nazevPromenne)''... |
} | } | ||
| Řádka 49: | Řádka 49: | ||
; 1. Vypište jména všech osob v kontejneru instancí třídy <code>Osoba</code> | ; 1. Vypište jména všech osob v kontejneru instancí třídy <code>Osoba</code> | ||
List<Osoba> kontejner = new ArrayList<>(); | List<Osoba> kontejner = new ArrayList<>(); | ||
| + | // ... | ||
| + | // ... zde by byl kód, který do kontejneru vloží prvky | ||
| + | // ... | ||
'''for''' (Osoba o : kontejner) { | '''for''' (Osoba o : kontejner) { | ||
System.out.println(o.getJmeno()); | System.out.println(o.getJmeno()); | ||
| Řádka 57: | Řádka 60: | ||
* Sečtěte celkový stav na všech účtech dohromady: | * Sečtěte celkový stav na všech účtech dohromady: | ||
List<Ucet> ucty = new ArrayList<>(); | List<Ucet> ucty = new ArrayList<>(); | ||
| + | // ... | ||
| + | // ... zde by byl kód, který do kontejneru vloží prvky | ||
| + | // ... | ||
int vysledek = 0; | int vysledek = 0; | ||
'''for''' (Ucet u : ucty) { | '''for''' (Ucet u : ucty) { | ||
| Řádka 62: | Řádka 68: | ||
} | } | ||
System.out.println(vysledek); | System.out.println(vysledek); | ||
| − | |||
| − | |||
== Přehled syntaxe — srovnání s polem == | == Přehled syntaxe — srovnání s polem == | ||
| Řádka 102: | Řádka 106: | ||
== Úkoly == | == Úkoly == | ||
| − | + | === Úkol 1 === | |
* Vytvořte seznam (list) pro uložení celých čísel (použijte třídu <code>Integer</code>). | * Vytvořte seznam (list) pro uložení celých čísel (použijte třídu <code>Integer</code>). | ||
* Vložte do seznamu 5 náhodně vygenerovaných čísel. Pro generování náhodného čísla můžete využít kód: | * Vložte do seznamu 5 náhodně vygenerovaných čísel. Pro generování náhodného čísla můžete využít kód: | ||
| Řádka 109: | Řádka 113: | ||
* Vypište součet vygenerovaných čísel. | * Vypište součet vygenerovaných čísel. | ||
* Vypište průměrnou hodnotu vygenerovaých čísel. | * Vypište průměrnou hodnotu vygenerovaých čísel. | ||
| − | * Vypište největší číslo v& | + | * Vypište největší číslo v seznamu. |
| − | + | === Úkol 2 === | |
* Máte kontejner instancí třídy <code>Klient</code>. | * Máte kontejner instancí třídy <code>Klient</code>. | ||
* Máte k dispozici metodu <code>odesliPlatbu(Klient k, int castka)</code>. Jedná se o instanční metodu vaší třídy. | * Máte k dispozici metodu <code>odesliPlatbu(Klient k, int castka)</code>. Jedná se o instanční metodu vaší třídy. | ||
* Všem klientům máte odeslat částku ve výši 100 Kč. | * Všem klientům máte odeslat částku ve výši 100 Kč. | ||
| − | + | === Úkol 3 === | |
* Máte kontejner instancí třídy <code>Odev</code>. | * Máte kontejner instancí třídy <code>Odev</code>. | ||
* Vytvořte instanci třídy <code>Pradelna</code>, třída má metodu <code>oper(Odev o)</code>. (Třídu <code>Pradelna</code> psát nemusíte.) | * Vytvořte instanci třídy <code>Pradelna</code>, třída má metodu <code>oper(Odev o)</code>. (Třídu <code>Pradelna</code> psát nemusíte.) | ||
* Vezměte postupně všechny instance třídy <code>Odev</code> a předejte je k oprání vytvořené instanci třídy <code>Pradelna</code>. | * Vezměte postupně všechny instance třídy <code>Odev</code> a předejte je k oprání vytvořené instanci třídy <code>Pradelna</code>. | ||
Aktuální verze z 27. 9. 2022, 09:23
Obsah |
Kontejner
- Třída, která umožňuje ukládat více objektů.
- Java nabízí velké množství tříd, které fungují jako kontejner.
- Většina kontejnerů je v balíčku
java.util. - Příklady kontejnerů:
java.util.ArrayList,java.util.HashMap,java.util.Deque,...
Rozhraní List
- Některé kontejnery jsou navzájem podobné a používají podobné operace.
- Pokud chceme napsat kód tak, že bude moci pracovat s libovolným z podobných kontejnerů, nabízí nám Java rozhraní.
- Příkladem je rozhraní
java.util.List. Toto rozhraní implementují třídy:java.util.ArrayList,java.util.LinkedLista další. Poud napíšeme kód s využitím rozhraníList, může uživatel použít kteroukoli z tříd, implementující toto rozhraní.
Práce s kontejnerem ArrayList
- Vytvoření kontejneru
- Vytvoření ArrayListu pro ukládání objektů třídy
Predmetzapíšeme:
List<Predmet> kontejner = new ArrayList<>();
- Ve starých verzích Javy (před verzí 8) bylo nutno psát název třídy dvakrát — i tento zápis můžete potkat:
List<Predmet> kontejner = new ArrayList<Predmet>();
- Uložení objektu
kontejner.add(predmet);
- Získání objektu
Predmet kontejner.get(poradi);
- Odstranění objektu z kontejneru
kontejner.remove(poradi); kontejner.remove(predmet); kontejner.clear();
- Zjištění počtu prvků v kontejneru
int kontejner.size(); boolean kontejner.isEmpty();
Procházení kontejneru
- Předpokládejme, že máme kontejner instancí třídy
Prvek:
List<Prvek> kontejner = new ArrayList<>();
- Pokud chceme projít všechny prvky v kontejneru a s každým provést nějakou operaci, pak použijeme cyklus
for each. - Zapisujeme:
for (Prvek nazevPromenne : kontejner) {
// ... Práce s konkrétním prvkem (je v proměnné nazevPromenne)...
}
- Příklady
- 1. Vypište jména všech osob v kontejneru instancí třídy
Osoba
List<Osoba> kontejner = new ArrayList<>();
// ...
// ... zde by byl kód, který do kontejneru vloží prvky
// ...
for (Osoba o : kontejner) {
System.out.println(o.getJmeno());
}
- 2. Sečtěte hodnoty všech prvků v poli
- Máte kontejner instancí třídy
Ucet. TřídaUcetmá metodugetStav(), která vrací číslo — aktuální stav účtu. - Sečtěte celkový stav na všech účtech dohromady:
List<Ucet> ucty = new ArrayList<>();
// ...
// ... zde by byl kód, který do kontejneru vloží prvky
// ...
int vysledek = 0;
for (Ucet u : ucty) {
vysledek += u.getStav();
}
System.out.println(vysledek);
Přehled syntaxe — srovnání s polem
ArrayList |
Pole | |
|---|---|---|
| Vytvoření kontejneru |
|
Auto pole[] = new Auto[5]
|
| Uložení prvku | kontejner.set(5, new Auto())kontejner.add(new Auto()) |
pole[5] = new Auto()
|
| Vyzvednutí prvku | kontejner.get(5).startuj() |
pole[5].startuj()
|
| Zjištění počtu prvků | kontejner.size() |
pole.length
|
| Odstranění prvku | kontejner.remove(auto);kontejner.remove(3); |
|
| Průchod foreach |
for (Auto a : kontejner) {
a.jed();
}
|
for (Auto a : pole) {
a.jed();
}
|
| Co lze ukládat? | pouze objekty (Integer, Klient,...) |
objekty i skalární datové typy (int, boolean,...)
|
Úkoly
Úkol 1
- Vytvořte seznam (list) pro uložení celých čísel (použijte třídu
Integer). - Vložte do seznamu 5 náhodně vygenerovaných čísel. Pro generování náhodného čísla můžete využít kód:
Integer nahodne = (int)(Math.random()*99+1);
- Vypište všechna čísla na obrazovku, každé na jeden řádek.
- Vypište součet vygenerovaných čísel.
- Vypište průměrnou hodnotu vygenerovaých čísel.
- Vypište největší číslo v seznamu.
Úkol 2
- Máte kontejner instancí třídy
Klient. - Máte k dispozici metodu
odesliPlatbu(Klient k, int castka). Jedná se o instanční metodu vaší třídy. - Všem klientům máte odeslat částku ve výši 100 Kč.
Úkol 3
- Máte kontejner instancí třídy
Odev. - Vytvořte instanci třídy
Pradelna, třída má metoduoper(Odev o). (TříduPradelnapsát nemusíte.) - Vezměte postupně všechny instance třídy
Odeva předejte je k oprání vytvořené instanci třídyPradelna.