NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 12 - ArrayList v Javě

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
vfsdfsdfdsf
Člen
Avatar
vfsdfsdfdsf:16.1.2014 11:21

Ahoj, mockrát díky za skvělý článek :) Škoda, že jsem o kolekcích nevěděl dřív, ušetřil bych si dost trápení když jsem zkoušel psát své jednoduché programy :D

Mám tři drobné dotazy:

1. Proč mi občas Scanner dělá to, že když zadám např. "3" (bez uvozovek), tak on to číslo jakoby přepíše a další System.out napíše hned místo toho čísla? Dělá mi to jen někdy asi tak 1 případ z 10.
Např. Tvá volba: Díky za použití programu
Zkoušel jsem i přímo zkopírovat kód odsud, se stejným výsledkem.

2. Jak je věrohodná metoda nextInt třídy Random? Z čeho vyvozuje čísla? Přidal jsem 100 čísel do ArrayListu a medián byl 88 o_O Vyhnul jsem se tomu, že bych zakládal více instancí... mám jen jednu pro celý program.

3. U té poznámky ke Konstruktorům (kopírování z pole) - nemá tam být ArrayList? Zkoušel jsem ten List<String> co to udělá, no ani se mi to nezkompilovalo :D

Každopádně mockrát díky :) Je to super

 
Odpovědět
16.1.2014 11:21
Avatar
Kit
Tvůrce
Avatar
Kit:16.1.2014 12:03
  1. Zkus sc.nextLine() hned po scanu čísla.
  2. Udělej si statistiku a poznáš sám.
  3. Správně je skutečně
List<String> seznam = new ArrayList<String>(Arrays.asList(poleStringu));

i když často je možné použít jednodušší

List<String> seznam = Arrays.asList(poleStringu);

jen je potřeba dát pozor na tohle:

String[] pole = {"Adam", "Božena", "Cyril"};
List<String> seznam = Arrays.asList(pole);
System.out.println(seznam.get(2));
pole[2] = "David";
System.out.println(seznam.get(2));

protože to proti předpokladům vypíše

Cyril
David

a to může být v některých situacích docela nepříjemné. Nevytváří se totiž nový seznam, ale jen pohled na pole tak, aby vypadalo jako seznam.

Editováno 16.1.2014 12:06
Odpovědět
16.1.2014 12:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vfsdfsdfdsf
Člen
Avatar
Odpovídá na Kit
vfsdfsdfdsf:16.1.2014 13:38
  1. Pomohlo to :) Je to asi něco podobné, jako s prázdným cin.get() u C++... ono je to dost složité pochopit, jak to funguje vnitřně, takže se tím moc zabývat teď nebudu... na to zatím nemám hlavu :D
  2. Zkusil jsem 5000 iterací a medián byl 62 a potom 54, to už celkem jde :)
  3. Mám ten příklad s Adamem, Boženou a Cyrilem chápat tak, že je to něco podobného, jako když přiřadíme jednu referenční proměnnou druhé referenční proměnné? Obě pak odkazují na tu samou instanci...

Jinak, kdy je tedy vhodné použít vlevo List a kdy ArrayList? Výše si psal, cituji:

Programovat se má proti rozhraní, nikoli proti implementaci.

Vůbec nechápu, jak si to myslel...
A ještě bych se rád zeptal: v dalším článku (diář) je toto:

private ArrayList<Zaznam> zaznamy = new ArrayList<>();

U instance není uveden datový typ... ale v ref. proměnné je. To se může? Chápu to tak, že instance je rozšířená na všechny dat. typy a tudíž nemůže být přiřazena do ref. proměnné, která je zúžená jen na dat. typ záznam.

Je pravda, že v tom začínám mít docela guláš, kdy co použít :D

 
Odpovědět
16.1.2014 13:38
Avatar
Kit
Tvůrce
Avatar
Odpovídá na vfsdfsdfdsf
Kit:16.1.2014 13:47

List je rozhraní (interface), ArrayList je jedna z jeho implementací. Pokud jiná část aplikace bude vyžadovat v rozhraní List, tak jí v daném případě bude jedno, zda to bude ArrayList nebo LinkedList. Budou zaměnitelné.

Jak vidíš, Java snese hodně. Proto si na tyhle vlastnosti před použitím píši testy, které ve výsledné aplikaci nechávám, abych si například při změně běhového prostředí mohl rychle ověřit, že to stále funguje.

Odpovědět
16.1.2014 13:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Tom Barbořík:23.11.2014 12:58

Máš chybu v příkladu. U struktury switch / case se můžou používat jenom primitivní dat. typy a ty tu máš String. Vyřešil jsem to získáním 1. znaku ze stringu metodou charAt(0), ale je potřeba to ještě ošetřit v případě, že není zadaný žádný znak.

 
Odpovědět
23.11.2014 12:58
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Tom Barbořík
David Hartinger:23.11.2014 14:11

Neni to chyba, mas starou verzi Javy, switch umí stringy myslím od sedmicky a už ta je dost stara :)

Odpovědět
23.11.2014 14:11
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Tom Barbořík:24.11.2014 20:40

Javu mám osmičku. To by mi pak nešlo použít ani localdatetime.
Problém byl v ide. Vyřešil jsem to podle tohoto návodu: http://stackoverflow.com/…1443/3237756

 
Odpovědět
24.11.2014 20:40
Avatar
Ten Zdeněk :21.3.2015 20:26

nechápu tento blok:

for (int i : cisla)
                s += i + " ";

Přijde mi divná syntaxe cyklu for(). Nevím jestli jsem blbý nebo je to špatně napsané. Přečetl jsem si znovu cykly, ale takový zápis jsem nenašel.
Jinak super článek, Díky. :)

 
Odpovědět
21.3.2015 20:26
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Ten Zdeněk
Jan Vargovský:21.3.2015 20:56
https://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

Kdybys to nějak nezchroustal, tka ti tu napíšu nějaký výcuc :)

 
Odpovědět
21.3.2015 20:56
Avatar
roman64
Tvůrce
Avatar
roman64:26.6.2015 9:36

Poznámka k příspěvku KIT z 16.1.2014. Pokud změníš prvek arrayList, který se předtím "zkopíroval" (odkazuje)z pole, tak se změna prvku nepromítne do pole (opačne to funguje - jak uvádíš).

http://www.itnetwork.cz/dev-lighter/614

Odpovědět
26.6.2015 9:36
Definice šílenství je dělat stejnou věc znovu a znovu a očekávat jiné výsledky.“ Albert Einstein.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 73.