ARCHIV |
|||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
Programování v jazyku Java (9) - Pole IIToto je první článek seriálu o programování v Javě, který navazuje na původní seriál Petra Hatiny, přerušený loni v září. Budeme se zabývat funkcemi, které nám
usnadňují manipulace s poli a vykonávají za nás nepříjemnou "černou" práci. Využití třídy SystemKopírování prvků polí
Třída
Následující příklad ukazuje zkopírování části pole čísel typu double src[] = new double[10]; double dest[] = new double[5]; ... // zde se přiřazují prvky System.arraycopy(src, 3, dest, 0, 5);
Prvky primitivních typů se nesmí typově lišit. U referenčních typů je
povolena jen taková odlišnost, kdy lze cílovému prvku ten zdrojový přiřadit
(konkrétní typ se přitom může lišit). Porušení tohoto pravidla má za
následek vyhození výjimky Thread ta[] = new Thread[4]; ta[0] = new Thread(); ta[1] = new Thread(); System.arraycopy(ta, 0, ta, 2, 2);
Používání Mechanismy poskytované třídou Arrays
S pouhým kopírováním polí se určitě nespokojíme, v praxi bývá potřeba
mnohem více operací. Právě pro tyto účely je určena třída
Převod na řetězec
Toto není metoda příliš typická pro pole (také byla přidána až ve verzi 1.5),
uvádím ji však jako první, protože se hodí pro ladění a testování programů.
Její smysl je podobný jako u stejnojmenné metody třídy int ia[] = new int[3]; ... // zde se přiřazují prvky System.out.println(Arrays.toString(ia)); Object oa[] = new Object[10]; ... // zde se přiřazují prvky System.out.println(Arrays.toString(oa));
Pokud je některý z prvků sám polem, nepřevedou se na text jeho prvky, nýbrž
se mu zavolá metoda Plnění polí
Často potřebujeme naplnit pole nebo jeho část nějakou konkrétní hodnotou.
K tomu slouží metoda int ia[] = new int[100]; Arrays.fill(la, 0); String sa[] = new String[5]; Arrays.fill(sa, 0, 2, "text1"); Arrays.fill(sa, 2, 5, "text2"); Netřeba snad připomínat, že při plnění pole prvků referenčního typu se odkazuje ve všech prvcích na tentýž objekt. Porovnávání polí
Máme dvě pole a potřebujeme zjistit, zda jsou shodná. To dokáže metoda
byte ba1[] = new byte[10]; byte ba2[] = new byte[8]; boolean b = Arrays.equals(ba1, ba2); // vrátí false - různá délka int ia1[] = new int[5]; int ia2[] = new int[5]; Arrays.fill(ia1, 0); Arrays.fill(ia2, 0); boolean b = Arrays.equals(ia1, ia2); // vrátí true - shodná pole ia2[3] = 5; b = Arrays.equals(ia1, ia2); // vrátí false - různé hodnoty 1 prvku Seřazení pole
Řazení prvků pole patří mezi složitější úlohy, proto je dobře, že
je k dispozici mechanismus, který to za nás vykoná. Příslušná
statická metoda se jmenuje long la[] = new long[1000]; ... // zde se přiřazují prvky Arrays.sort(la);
Prvky referenčních typů můžeme řadit pouze tehdy, implementuje-li
jejich třída rozhraní
Object oa[] = new Object[3]; oa[0] = "abc"; oa[1] = "123"; oa[2] = "%%%%%"; Arrays.sort(oa); // toto lze oa[1] = new Double(1); Arrays.sort(oa); // nelze, způsobí výjimku ClassCastException Vyhledávání v poli
Poslední z věcí, na kterou se dnes podíváme, je vyhledávání prvku
v poli. To je zde implementováno jako hledání binárním dělením
- proto je nutné, aby pole bylo předem seřazeno metodou float fa[] = new float[200]; ... // zde se přiřazují prvky Arrays.sort(oa); // seřazení pole int i = Arrays.binarySearch(0.4); // vrátí index hledaného prvku Pohodlnější práce s hromadnými datyPole jsou jednoduchou formou uchovávání většího množství dat. Na jejich omezení ale narazíme již v okamžiku, kdy potřebujeme měnit počet prvků nebo dělat nějaké složitější operace. Proto existují tzv. kontejnery (o nichž bude řeč příště), což jsou objekty, ve kterých máme uložena svá data a s jejichž pomocí můžeme provádět různé operace.
Související články
Předchozí Celou kategorii (seriál) Další
Programování v jazyku Java (1) - Úvod
Programování v jazyku Java (2) - instalace, překlad a spouštění Programování v jazyku Java (3) - Základy syntaxe Programování v jazyku Java (4) - Proměnné a operace s nimi Java (5) - Řízení programu Programování v jazyku Java (6) - Řetězce I Programování v jazyku Java (7) - Řetězce II Programování v jazyku Java (8) - Pole I Java (10) - Kontejnery I. Java (11) - Kontejnery II. Java (12) - Kontejnery III. Java (13) - JDK, vývojová prostředí Java (14) - štábní kultura, specifika Java (15) - I/O operace I. Java (16) - I/O operace II. Java (17) - práce se soubory Java (18) - síťová komunikace I. Java (19) - síťová komunikace II. Java (20) - vlákna Java (21) - datové typy Java 5 - recenze knihy Java (22) - omezování práv I. Java (23) - omezování práv II. Java (24) - úvod do grafiky a GUI Java (25) - základní grafické třídy Java (26) - tvorba GUI Java (27) - seznamy, stromy, tabulky Java (28) - renderery a editory Java (29) - správci rozložení Java (30) - Look and Feel Java (31) - základy tisku Java (32) - tiskové služby BlueJ IDE JavaFX - prostředí pro tvorbu RIA aplikací (1) Java a rozšířené atributy souborů JavaFX - prostředí pro tvorbu RIA aplikací (2) Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |