|
||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
Software (10844)
|
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.
|
Search Software
Search Google
|
||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |