Pole Array Pole je tak objekt tj m
Pole ( Array ) • Pole je také objekt, tj. má typ a vytváří se dynamicky na haldě. • Neměnnou délku pole určuje jeho atribut public final int length >= 0. • Prvky pole se indexují v mezích 0. . . pole. length-1, jinak dojde k java. lang. Array. Index. Out. Of. Bounds. Exception. • Pole a prvky pole se poznají právě dle hranatých závorek vyjadřujících dimensionalitu pole v rozsahu 1 … 255. • Nadtypy každého pole jsou jen: Object, Cloneable ( mělce ), Serializable. - nelze vzájemně přetypovat: int[ ] q={1, 2, 3}; double[ ] r = (double[ ]) q; • Typy prvků pole musí být kompatibilní s typem pole. • Ač pole není Iterable, jednorozměrné lze projít cyklem for-each, tj. : for( Typ item : ( pole | kolekce ) ). Hodnoty prvků však v tomto případě nelze měnit. • Primitivní pole jsou homogenní, tj. obsahují pouze primitivní prvky téhož typu. Prvky se inicializují na nuly, boolevské na false. • Referenční pole obsahují reference k objektům anebo null. Mohou být nehomogenní - ovšem jen v rámci typu pole. Defaultně se inicializují na null. PJV 04 1
Příklady jednorozměrných polí int x = 7; int[ ] a = { 1, 2, 3, ‘A’+1, 0 x. FF+1, 077 & 0 b 11, x, x++, ++x, Math. max( x, 5), }; int[ ] b = new int[ 10 ]; // initialized by 0 Integer[ ] c = { 1, 2, 3, true ? 1 : 2 }; Double[ ] d = { 1, 2, 3 }; Double[ ] d = { 1. 0, 2. 0, 3. 0 }; // OK boxing // NO boxing // OK boxing String[ ] s = { "A", "BB", "CCC" }; Object[ ] p = new Point[ 5 ]; Object[ ] x = { new Long(1), "CC", new Short(0) }; // homogenous // initialized by null // heterogenous Point[ ] y = { new Point(1, 2), null, }; int len = y. length; y[1] = new Point(5, 6); Object[ ] oo = y; // get array length=2 // assignment // compatible assign. Serializable[ ] z = { "A", 1. 0, 1, null }; // OK boxing PJV 04 2
Pole non-static context garbage collected heap static context Object. class loader non-static general methods: clone( ), equals( , hash. Code( ), Serializable. class finalize( ), get. Class( ), notify. All( ), to. String( ), wait( ) int [ ] a int [ ] z=null int [ ] Cloneable. class int [ ]. class final int length 0 1 …. length-1 PJV 04 3
Třída java. util. Arrays Obsahuje řadu přetížených statických metod pro práci s poli 1 D i n. D. • • • List as. List(…) – převod do Array. Listu, výčet primitivů lze, jejich pole ne int binary. Search – hledání v seřazeném poli či jeho části copy. Of, copy. Of. Range – kopie pole dle zadané délky a i s přetypováním boolean deep. Equals – hluboký test ekvivalence pro n. D String deep. To. String – převod vícerozměrného pole do tvaru [[ … ]] boolean equals – test ekvivalence pro 1 D void fill – vyplní všechny položky danou hodnotou int hash. Code a deep. Hash. Code – výpočet pro pole 1 D a n. D void sort – řazení polí: vzestupné primitivních, volitelně referenčních String to. String – převod 1 D pole do tvaru [ … , … ] 1. 8 • void parallel. Prefix • void parallel. Sort - výkonnější sort pro více procesorů • set. All a parallel. Set. All – řiditelné nastavení jednotlivých prvků pole • Spliterator spliterator • Stream stream PJV 04 4
Vícedimensionální pole se tvoří skládáním jednodimensionálních - a nemusejí být rektangulární. • Příklady: int[ ][ ] aa = new int[10][5]; // rectangular matrix 10 rows 5 cols int[ ][ ] bb = { {1}, {2, 3}, {4, 5, 6} }; // triangle matrix with 3 rows int len = bb[1]. length; // length of second row is 2 bb[2][1] = 9; // assign 9 (old value was 5) bb[1] = null; // second row does not exist Point[ ][ ] = { { new Point(0, 0), new Point(1, 1), null } , { new Point(2, 2) }, null, }; • RTTI ( Run Time Type Identification ) umožňuje určit typ pole a jeho dimensionalitu dle přiřazeného písmena a počtu otvíracích hranatých závorek. PJV 04 5
Příklad řazení pole String[ ] p = {"CC", "AA", "AAA", "BBB", "A", "AA“, "C", "AAB"}; Arrays. sort( p ); // natural Alternativně v 1. 8 : Comparator<String> c 1 = ( a, b ) -> a. length( ) - b. length( ), // length ascending c 2 = ( a, b ) -> b. length( ) - a. length( ), // length descending c 3 = c 2. then. Comparing( ( a, b ) -> a. compare. To( b ) ), // desc. and natural c 4 = Comparator. comparing. Int( String: : length ); // desc. and natural Arrays. sort( p, c 3 ); Stream<String> ss = Arrays. as. List( p ). stream( ); ss. sorted( c 1 ). for. Each( s -> System. out. println(s) ); // using stream // length ascending // kompaktně: Arrays. as. List(p). stream( ). sorted( c 1 ). for. Each( s -> System. out. println(s) ); PJV 04 6
- Slides: 6