Java: Kontejnery

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Přidána tabulka s přehledem syntaxe.)
m (Úkol 1: Oprava překlepu)
 
(Není zobrazeno 7 mezilehlých verzí od 1 uživatele.)
Řádka 3: Řádka 3:
 
== Kontejner ==
 
== Kontejner ==
 
* Třída, která umožňuje ukládat více objektů.
 
* Třída, která umožňuje ukládat více objektů.
* Příklad: Třída <code>ArrayList</code>.
+
* Java nabízí velké množství tříd, které fungují jako kontejner.
 +
* Většina kontejnerů je v&nbsp;balíčku <code>java.util</code>.
 +
* Příklady kontejnerů: <code>java.util.ArrayList</code>, <code>java.util.HashMap</code>, <code>java.util.Deque</code>,...
 +
 
 +
== 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&nbsp;libovolným z&nbsp;podobných kontejnerů, nabízí nám Java ''rozhraní''.
 +
* Příkladem je rozhraní <code>java.util.List</code>. Toto rozhraní implementují třídy: <code>java.util.ArrayList</code>, <code>java.util.LinkedList</code> a další. Poud napíšeme kód s&nbsp;využitím rozhraní <code>List</code>, může uživatel použít kteroukoli z&nbsp;tříd, implementující toto rozhraní.
 +
 
  
 
== Práce s kontejnerem <code>ArrayList</code> ==
 
== Práce s kontejnerem <code>ArrayList</code> ==
  
 
; Vytvoření kontejneru
 
; Vytvoření kontejneru
  ArrayList<''Predmet''> ''kontejner'' = new ArrayList<''Predmet''>();
+
* Vytvoření ArrayListu pro ukládání objektů třídy <code>Predmet</code> zapíšeme:
* Od Javy 8 stačí psát:
+
  List<''Predmet''> ''kontejner'' = new ArrayList<>();
  ArrayList<''Predmet''> ''kontejner'' = new ArrayList<>();
+
* Ve starých verzích Javy (před verzí 8) bylo nutno psát název třídy dvakrát &mdash; i tento zápis můžete potkat:
 +
  List<''Predmet''> ''kontejner'' = new ArrayList<''Predmet''>();
  
  
Řádka 27: Řádka 36:
 
  int ''kontejner''.size();
 
  int ''kontejner''.size();
 
  boolean ''kontejner''.isEmpty();
 
  boolean ''kontejner''.isEmpty();
 
  
 
== Procházení kontejneru ==
 
== Procházení kontejneru ==
 
* Předpokládejme, že máme kontejner instancí třídy <code>Prvek</code>:
 
* Předpokládejme, že máme kontejner instancí třídy <code>Prvek</code>:
  ArrayList<Prvek> kontejner = new ArrayList<>();
+
  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 <code>for each</code>.
+
* Pokud chceme projít všechny prvky v kontejneru a s&nbsp;každým provést nějakou operaci, pak použijeme cyklus <code>for each</code>.
 
* 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&nbsp;proměnné nazevPromenne)''...
 
  }
 
  }
  
 
; Příklady:
 
; Příklady:
 
; 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>
  ArrayList<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 48: Řádka 59:
 
* Máte kontejner instancí třídy <code>Ucet</code>. Třída <code>Ucet</code> má metodu <code>getStav()</code>, která vrací číslo &mdash; aktuální stav účtu.
 
* Máte kontejner instancí třídy <code>Ucet</code>. Třída <code>Ucet</code> má metodu <code>getStav()</code>, která vrací číslo &mdash; aktuální stav účtu.
 
* Sečtěte celkový stav na všech účtech dohromady:
 
* Sečtěte celkový stav na všech účtech dohromady:
  ArrayList<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 54: Řádka 68:
 
  }
 
  }
 
  System.out.println(vysledek);
 
  System.out.println(vysledek);
 
 
  
 
== Přehled syntaxe &mdash; srovnání s polem ==
 
== Přehled syntaxe &mdash; srovnání s polem ==
Řádka 87: Řádka 99:
 
       a.jed();  
 
       a.jed();  
 
  }
 
  }
 +
|-
 +
| Co lze ukládat?  || pouze objekty (<code>Integer</code>, <code>Klient</code>,...) || objekty i skalární datové typy (<code>int</code>, <code>boolean</code>,...)       
 
|-
 
|-
 
|}
 
|}
Řádka 92: Řádka 106:
  
 
== Úkoly ==
 
== Úkoly ==
; Úkol 1  
+
=== Úkol 1 ===
 +
* 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:
 +
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&nbsp;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). 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 2
+
=== Ú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

Rozhraní List


Práce s kontejnerem ArrayList

Vytvoření kontejneru
List<Predmet> kontejner = new ArrayList<>();
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

List<Prvek> kontejner = new ArrayList<>();
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
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

import java.util.ArrayList;
...
ArrayList<Auto> kontejner = new ArrayList<>();

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

Integer nahodne = (int)(Math.random()*99+1);

Úkol 2

Úkol 3

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje