Kezdőoldal » Számítástechnika » Programozás » Javában a for ciklus esetén...

Javában a for ciklus esetén minden ciklusban ki fogja számolni a tömb hosszát a program?

Figyelt kérdés

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){

...

}



2020. okt. 17. 22:50
1 2
 1/12 anonim ***** válasza:
igen, ha külön definiálod akkor gyorsabb a tömb kezelés. netbeans kiírja a futtatási időt.
2020. okt. 17. 23:17
Hasznos számodra ez a válasz?
 2/12 sajtosmatyi válasza:
65%

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

2020. okt. 17. 23:22
Hasznos számodra ez a válasz?
 3/12 anonim ***** válasza:

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!

2020. okt. 18. 00:01
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:
29%

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.

2020. okt. 18. 00:15
Hasznos számodra ez a válasz?
 5/12 anonim ***** válasza:
Azt is figyelembe kell venni, hogy a tömb a cikluson belül módosulhat, vagy (ritka esetben - sose láttam ilyet, de elméletileg lehetséges) egy másik szál módosíthatja. Ha a hossz nem értékelődik ki a ciklusmag minden futása előtt, ilyen esetben komoly probléma léphet fel, ha törölve lett elem akkor jól elszáll a program, ha pedig bele lett téve, a menet közben keletkező elemeket kihagyja.
2020. okt. 18. 01:29
Hasznos számodra ez a válasz?
 6/12 A kérdező kommentje:
A legtöbb esetben a tömb mérete nem szokott megváltozni, legalábbis azokban a kódokban amiket én írok. Köszönöm a válaszokat :)
2020. okt. 18. 02:45
 7/12 anonim ***** válasza:
Ezt a length fuggvenyt te irtad? Javaban van a tombnek length valtozoja, miert nem azt hasznalod?
2020. okt. 18. 13:02
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:
0%
#4 vagyok. :D Nem értem mi ez a lepontozás. Vagy a tipikus magyar mentalitás? Aki tud, azt tapossuk? :D
2020. okt. 18. 19:37
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:
Azért kaptad, mert aki nem ismeri a nyelvet alaposabban, annak nem magától értetődő, hogy pontosan mit csinál a kódrészleted. Az ilyen megoldások kerülendőek pont azért, mert lassítja a fejlesztést és félreértésekhez vezethet.
2020. okt. 18. 20:59
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:
100%
Ráadásul a streamek ugyanúgy for ciklusokat használnak, csak húztak föléjük egy API-t, így performancia szempontjából eleve nem lehetnek jobbak.
2020. okt. 19. 08:20
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!