Kezdőoldal » Számítástechnika » Programozás » Miért rendeződik át a lista?

Miért rendeződik át a lista?

Figyelt kérdés

> Example.java:


public class Example {


____ private ArrayList<SomeObject> objects;


____ Example(final ArrayList<SomeObject> objects) {

________ this.objects = objects;

________ doTheJob();

____ }


____ private void doTheJob() {

________ processes.sortByAlphabet();

____ }


}


> Other.java:


public class Other {


____ private ArrayList<SomeObject> objects;

____ private Example example;


____ objects = populate(); // a fgv. feltölti adatokkal az objects array-t

____ example = new Example(objects);


}


--


És akkor a kérdés:


Az Other.java-ban létrehozok egy ArrayList-et, amit átadok az Example osztály konstruktorának.


A konstruktor a kapott ArrayList-et eltárolja a saját private ArrayList-jében, majd ABC sorrendbe rendezi annak a tartalmát.


A kérdés, hogy ezek után ha for()-al kilistázom az Other class "objects" ArrayList-jét, akkor azt látom, hogy az is ugyanúgy ABC sorrendbe rendeződött, pedig a Example-ben lévő rendezőfüggvény nem is ezen a listán dolgozott, hanem a sajátján. Miért rendeződik ugyanúgy ABC sorrendbe ez a lista is, ha nem is azzal dolgozik tovább az Example-ben lévő ABC rendező függvénye?



máj. 7. 02:26
 1/5 A kérdező kommentje:
A függvényben objects.sortByAlphabet(); lenne, csak elfelejtettem átírni.
máj. 7. 02:28
 2/5 anonim ***** válasza:
72%
Azért, mert referenciát adsz át.
máj. 7. 02:58
Hasznos számodra ez a válasz?
 3/5 Szikszai.B ***** válasza:
72%

Javaban az összetett adattípusok referenciaként adódnak át, a primitívek érték szerint.



Herbert Schildt - Java: The Complete Reference, nagyon jó könyv, az aktuális kiadást ajánlom átolvasásra.

máj. 7. 06:08
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
81%

Amikor egy primitív adattípust adsz paraméternek, pl int-et, akkor az értékként adódik át, azaz készül egy másolat és az objektum saját adattagja különböző lesz, mint amit a főprogramban van.

Az összetett adattípusok viszont referenciaként adódnak át, azaz ott csak egy mutató fog átadódni, ami az adat memóriabeli helyét mutatja. Mivel magáról az adatról nem készül másolat, így ha az objektum módosítja az adatokat, akkor az eredeti is "módosul" - hiszen ugyanoda mutat a pointer.

máj. 7. 08:38
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:

Hogy jól értsem, ez a két sor az Example osztályban azt csinálja, hogy tulajdonképpen egy pointerré teszi az ArrayList-et, ami a konstrukorban paraméterül kapott objektumra mutat?


private ArrayList<SomeObject> objects;


{

____this.objects = objects;

}


És mi van akkor, hogyha én azt akarom, hogy lemásolja? C-ben ez tök máshogy működött és nem értem mi ebben a logika Java esetén.

máj. 7. 20:23

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!