Javában a for ciklus esetén minden ciklusban ki fogja számolni a tömb hosszát a program?
Ha azt adom meg neki hogy a tömb végéig menjen akkor minden ciklusban meghívja azt a length(tömb) függvényt? Ha az elején kiszámoltatom vele azt az értéket akkor gyorsabbá tehetem a programot, vagy ne foglalkozzak vele?
pl.
for(int i=0;i<length(tomb);++i){
...
}
vagy
int n=length(tomb);
for(int i=0;i<n;++i){
...
}
Igen, gyorsabb lesz, de valószínűleg jelentételen idővel.
Ha a tömböd (több) százezer adatot tartalmaz akkor akár 1 tized másodperccel is gyorsabb lehet :D
Fordításkor a for ciklus elöltesztelős ciklussá íródik át.
A length(tomb) bekerül a ciklusmagba, hiszen ez egy változó adat, ki kell értékelni a ciklus fordulása előtt, hogy nem változott-e meg.
Ha előtte külön definiálod a tömb méretét, akkor statikus adattá fordítódik le és gépi kódban úgy fog kinézni az utasítás, hogy "na, akkor most fix 4-szer csináljuk ezt meg, aztán halaggyunk' tovább".
Vedd észre, hogy lehet olyan eset, amikor a külön definiálás rossz megoldás lehet!
Jelentéktelen. Sőt! Legtöbb esetben nem is így használják már, hanem stream-mel.
pl.:
List.of(1, 2, 3, 4).forEach(System.out::println);
List.of(1, 2, 3, 4).forEach((item) -> System.out.println(item));
int[] arr = new int[] {1, 2, 3, 4};
Arrays.stream(arr).forEach(System.out::println);
Arrays.stream(arr).forEach((item) -> System.out.println(item));
// Ezért is jó a stream. Output: 2, 4
Arrays.stream(arr)
.filter((item) -> item % 2 == 0)
.forEach(System.out::println);
String[] strArr = new String[] {"A", "B", "C", "D"};
Arrays.stream(arr)
.filter((item) -> item % 2 == 0) // false esetén kiszedi egyesével
.map((item) -> item * -1) // egyesével minden elemet megszoroz 1-el
.forEach(System.out::println); // -2, -4
Persze a streammel lehet vadulni. De már kimondottan "for" parancsot nem tudom mikor használtam utoljára. Java8-tól a stream sokkalta átláthatóbb, ha lista-halmaz-tömb elemekkel kell szűrni/alakítani.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!