1. Mga array sa memorya

Sa mga nakaraang halimbawa, ang mga ilustrasyon ay medyo hindi tumpak.

Kapag lumilikha ng mga array (tulad ng kapag lumilikha ng mga string), dalawang magkahiwalay na bloke ng memorya ang inilalaan: isa para sa pag-iimbak ng array (lalagyan) mismo at isang pangalawang bloke para sa variable na nag-iimbak ng address nito . Ang larawan sa ibaba ay kumakatawan sa paglilinaw na ito:

Mga array sa memorya

Ang memorya na inilaan para sa hanay ng 10 intmga elemento at ang int[]variable na nag-iimbak ng address ng intarray, ay ipinapakita sa berde.

Para sa paghahambing, ang isang ordinaryong intvariable na nag-iimbak ng halaga 199ay ipinapakita sa asul.

Ito ay isang maliit na nakapagpapaalaala sa pag-iimbak ng mga string sa memorya, hindi ba?

Tama yan, strings. At tulad ng kapag nagtatrabaho ka sa mga string, maaari kang magtalaga ng mga variable ng array sa isa't isa:

Code Paliwanag
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Lumikha ng isang hanay ng 10 intmga elemento.
Italaga ang halaga 4sa cell na may index 2.
Italaga ang halaga 9sa cell na may index 7.
Sa bvariable, i-save ang address na nakaimbak sa avariable.
Ngayon aat bituro ang parehong array object sa memorya.
Sa cell ng array object na may index 9, isulat ang kabuuan ng mga value na nakaimbak sa mga cell 2(na nag-iimbak ng value 4) at 7(na nag-iimbak ng value 9).

Ang array object ay nananatili sa mismong lugar kung saan ito naroroon, at ang aat bmga variable ay nag-iimbak ng parehong address (reference) sa parehong bagay. Tingnan ang larawan:

Mga array sa memorya 2

2. Higit pang mga detalye tungkol sa pagtatrabaho sa mga array

Maaari kang lumikha ng isang hanay ng mga elemento ng ganap na anumang uri. Upang gawin ito, isulat lamang ang mga square bracket pagkatapos ng pangalan ng uri. Sa pangkalahatan, ang paglikha ng isang array ay ganito ang hitsura:

type[] name = new type[number];

Kung saan ang uri ay ang uri ng mga elemento na aming iimbak sa array. Ang pangalan ay ang pangalan ng variable na gagamitin namin upang sumangguni sa array, at ang numero ay ang bilang ng mga cell sa array.

Ang halimbawa sa itaas ay ang canonical form para sa paglikha ng array variable at array object. Sa katotohanan, ito ay dalawang magkahiwalay na entity.

Maaari kang lumikha ng isang array variable nang hiwalay mula sa isang array object:

type[] name;
name = new type[number];

At isa pang punto na hindi gaanong mahalaga:

Maaari kang gumamit ng mga variable o kahit na buong expression bilang index array at bilang ng mga elemento ng array .

Mga halimbawa:

Code Paliwanag
int n = 100;
int[] a = new int[n];
Lumikha ng isang hanay ng nmga elemento
int n = 100;
int[] a = new int[n * 2 + 3];
Gumawa ng array na may 203mga elemento
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Mahalaga:
Sa pamamagitan ng paraan, dapat mong malaman na kung susubukan mong i-access ang isang array cell gamit ang isang index na hindi umiiral para sa array (sa aming halimbawa, ibig sabihin ay anumang integer na wala sa range ), pagkatapos ay mag-crash ang program sa 0..99isang ArrayIndexOfBoundException, ibig sabihin na ang index ay nasa labas ng mga hangganan ng array.

3. Haba ng array

Tulad ng nakita mo sa nakaraang halimbawa, maaari kang lumikha ng isang array variable nang mag-isa at pagkatapos ay magtalaga ng isang halaga (isang reference sa isang array object) dito sa isang lugar sa code. Maaari mo ring gawin ito:

Code Paliwanag
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Gumawa ng array variable na ang uri ay int[]
Kung ang avariable ay mas mababa sa 10,
pagkatapos ay gumawa ng array ng 10mga elemento.
Kung hindi,
lumikha ng isang hanay ng 20mga elemento

At ngayon ano pa ang maaari mong gawin sa ganoong array? Paano mo malalaman kung ilang elemento ang nasa loob nito?

Upang makatulong dito, ang mga array ay may espesyal na property (variable) na pinangalanang length. Maaari mong mahanap ang haba ng isang array gamit ang expression na ito:

array.length;

Narito arrayang pangalan ng array variable at lengthang pangalan ng property ng array. Ang halaga ng lengthari-arian ay hindi mababago: ang lengthari-arian mismo ay maaaring italaga sa iba pang mga variable, ngunit walang maaaring italaga dito (kung susubukan mong gawin ito, ang programa ay hindi mag-compile).

Maaari tayong magpatuloy sa nakaraang halimbawa tulad nito:

Code Paliwanag
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Gumawa ng array variable na ang uri ay int[]
Kung ang avariable ay mas mababa sa 10,
pagkatapos ay gumawa ng array ng 10mga elemento.
Kung hindi,
lumikha ng hanay ng 20mga elemento
I-loop ang lahat ng elemento ng array: mula 0hanggang habaarray.length - 1

4. Buod ng mga katotohanan tungkol sa mga array sa Java

Recap natin ang alam natin tungkol sa mga array:

Katotohanan 1. Ang array ay binubuo ng maraming cell.

Katotohanan 2. Ina-access mo ang isang partikular na cell sa pamamagitan ng paggamit ng numero nito (index).

Katotohanan 3. Ang lahat ng mga cell ay may parehong uri.

Katotohanan 4. Ang paunang halaga ng lahat ng mga cell ay 0 (kung ang mga cell ay nag-iimbak ng mga numero), null(kung ang mga cell ay nag-iimbak ng mga sanggunian ng bagay), o false(kung ang mga cell ay nag-iimbak booleanng mga halaga). Matututo ka pa tungkol sa mga default na halaga sa kabanatang ito .

Ang katotohanan 5. String[] list ay deklarasyon lamang ng isang variable. Hindi nito ginagawa ang container (array object) mismo. Para magamit ang variable, kailangan mo munang gumawa ng array (container) at italaga ito sa variable. Tingnan ang halimbawa sa ibaba.

Katotohanan 6. Kapag gumawa tayo ng array object (container), dapat nating ipahiwatig kung gaano ito kalaki, ibig sabihin, kung gaano karaming mga cell ang nilalaman nito. Ginagawa ito sa isang pahayag tulad ng: new TypeName[n];

Katotohanan 7. Ang haba ng isang array ay matatagpuan gamit ang .lengthproperty.

Katotohanan 8. Pagkatapos gumawa ng array, hindi mo mababago ang uri ng mga elemento nito o ang bilang ng mga elemento na iniimbak nito.

Code Paliwanag
String s;
String[] list;
say null
listaynull
list = new String[10];
int n = list.length;
Ang listvariable ay nag-iimbak ng reference sa isang object: isang string array na binubuo ng 10mga elemento.
nay10
list = new String[0];

Ngayon listay tumutukoy sa isang hanay ng 0mga elemento. Umiiral ang array, ngunit hindi ito makakapag-imbak ng anumang elemento.

list = null;
System.out.println(list[1]);
Ang isang exception (program error) ay itatapon, ibig sabihin, ang programa ay mag-crash. listnag-iimbak ng reference sanull
list = new String[10];
System.out.println(list[10]);
Isang array-out-of-bounds exception (program error) ang bubuo.
Kung ang isang listnag-iimbak 10ng mga elemento/cell, ang wastong mga indeks ay: 0 1 2 3 4 5 6 7 8 910mga elemento.