Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Ѐилософия Java3Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 94

Автор Π‘Ρ€ΡŽΡ ЭккСль

Массив ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π° «старыС» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ β€” Π½Π΅Ρ‚. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° благодаря автоматичСской ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ выполняСтся автоматичСски. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ массивы ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ:

//β€’ arrays/Contai nerComparison.java

import java.util *;

import static net mindview.util Print *;

class BerylliumSphere {

private static long counter,

private final long id = counter++;

public String toStringO { return "Sphere " + id; }

}

public class ContainerComparison {

public static void main(String[] args) {

BerylliumSphere[] spheres = new Beryl 1iumSphere[10]; for(int i =0; i <5; i++)

spheres[i] = new Beryl 1iumSphere(), pri nt(Arrays.toStri ng(spheres)); print(spheres[4]);

List<BerylliumSphere> sphereList =

new ArrayLi st<Bery11i umSphere>(), for(int i = 0; i < 5, i++)

sphereList add(new BerylliumSphereO); print(sphereList); print(sphereList.get(4));

int[] integers = { 0, 1. 2, 3. 4, 5 }; pri nt(Arrays.toString(integers)), print(integers[4]);

List<Integer> intList = new ArrayList<Integer>(

Arrays asl_ist(0, 1. 2, 3. 4, 5)); intList.add(97); print(intList);

print(intList get(4)): ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &

}

} /* Output

[Sphere 0. Sphere 1. Sphere 2. Sphere 3, Sphere 4, null, null, null. null, null] Sphere 4

[Sphere 5. Sphere 6. Sphere 7. Sphere 8. Sphere 9] Sphere 9

[0. 1, 2. 3. 4. 5] 4

[0. 1. 2. 3. 4. 5. 97] 4

*/// ~

Оба способа хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ², Π° СдинствСнноС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ массивы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для обращСния ΠΊ элСмСнтам ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ [], a List β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ add() ΠΈΠ»ΠΈ get(). Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ языка Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ сдСлали массивы ΠΈ ArrayList Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ программисту Π±Ρ‹Π»ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Но, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π³Π»Π°Π²Π΅ И, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈ возмоТностями, Ρ‡Π΅ΠΌ массивы.

Π‘ появлСниСм ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° автоматичСской ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎ удобству Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ ΡƒΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ массивам. ЕдинствСнным Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ прСимущСством массивов остаСтся ΠΈΡ… ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ возмоТности массивов слишком ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, ΠΈ Ρ‚ΠΎΠ³Π΄Π° приходится ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌΠΈ классами.

Массив ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Π‘ ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ Ρ‚ΠΈΠΏΠΎΠΌ массива Π²Ρ‹ Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ массива Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прСдставляСт собой ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, созданный Π² динамичСской памяти. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ создаСтся Π»ΠΈΠ±ΠΎ нСявно (Π² синтаксисС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива), Π»ΠΈΠ±ΠΎ явно конструкциСй new. Одной ΠΈΠ· частСй ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° массива (Π° ΠΏΠΎ сути, СдинствСнным доступным ΠΏΠΎΠ»Π΅ΠΌ) являСтся доступная Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния пСрСмСнная length, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ массива. Π’Π΅ΡΡŒ доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ массива ограничиваСтся синтаксисом [ ].

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массивов ΠΈ присваивания ссылок Π½Π° массивы. Он Ρ‚Π°ΠΊΠΆΠ΅ наглядно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ массивы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ массивы ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹. ЕдинствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ массивы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² содСрТат ссылки, Π° массивы ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² содСрТат сами ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ значСния.

//β€’ arrays/ArrayOptions.java

// Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ присваиваниС массивов

import java util.*,

import static net mindview.util Print *;

public class ArrayOptions {

public static void main(String[] args) { // ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

BerylliumSphere[] a. // Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ нСинициализированная пСрСмСнная BerylliumSphere[] b = new Beryl 11umSphere[5];

// Бсылки Π² массивС автоматичСски ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ null printC'b. " + Arrays toString(b)). BerylliumSphere[] с = new Beryl 1iumSphere[4], for(int i =0, i < с length, i++)

if(c[i] == null) // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ссылки Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ [i] = new Beryl 1iumSphere(), // АгрСгатная инициализация. BerylliumSphere[] d = { new Beryl 1iumSphere().

new Beryl 1iumSphere(). new BerylliumSphereO

}.

// ДинамичСская агрСгатная инициализация a = new BerylliumSphere[]{

new Beryl liumSphereO. new Beryl liumSphereO.

}.

// (Π—Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π°Ρ запятая Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π° Π² ΠΎΠ±ΠΎΠΈΡ… случаях)

print("a.length = " + a length);

printC'b.length = " + b length),

printC'c length = " + с length),

printed length = " + d length);

a = d,

print("a.length = " + a.length);

// ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ²-int[] e, // Бсылка null int[] f = new int[5],

// ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π² массивС автоматичСски ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ нулями

printCf. " + Arrays.toString(f)),

int[] g = new int[4];

for(int i = 0. i < g length. i++)

g[i] = i*i. int:: h = { 11, 47, 93 },

// Ошибка компиляции пСрСмСнная e Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°

//!printC"Π΅ length = " + e.length);

printC'f. length = " + f.length),

printC'g length = " + g length),

printC'h length = " + h.length);

e = h,

printC'e.length = " + e length), e = new int[]{ 1.2}, printC'e. length = " + e.length);

}

} /* Output

b [null, null, null, null, null]

a.length = 2

b.length = 5

c. length = 4 d length = 3 a length = 3

f- [0. 0, 0, 0. 0] f length = 5

g.length = 4

h.length = 3 e.length = 3 e length = 2 *///.-

Массив Π° β€” нСинициализированная локальная пСрСмСнная, ΠΈ компилятор Π½Π΅ позволяСт Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с этой ссылкой Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°. Массив b инициализируСтся массивом ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ BerylliumSpere, хотя Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² массив Π½Π΅ заносится. НСсмотря Π½Π° это, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ b ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ этом проявляСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСдостаток массивов: ΠΏΠΎΠ»Π΅ length сообщаСт, сколько элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² массив, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° массива, Π° Π½Π΅ количСство хранящихся Π² Π½Π΅ΠΌ элСмСнтов. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° массива всС ссылки автоматичСски ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ null, ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, связан Π»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ элСмСнт массива с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, достаточно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ссылку Π½Π° равСнство null. Аналогично, массивы ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² автоматичСски ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ нулями для числовых Ρ‚ΠΈΠΏΠΎΠ²: (char)o для char ΠΈ false для boolean.

Массив с дСмонстрируСт созданиС массива с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ присваиваниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² BerylliumSphere всСм элСмСнтам массива. Массив d дСмонстрируСт синтаксис Β«Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΒ», ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массива создаСтся (с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом new, ΠΊΠ°ΠΊ массив с) ΠΈ инициализируСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ BerylliumSphere, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ всС это происходит Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ «динамичСской Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉΒ». АгрСгатная инициализация, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ d, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ опрСдСлСния d, Π½ΠΎ ΠΏΡ€ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΌ синтаксисС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массива ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² любой Ρ‚ΠΎΡ‡ΠΊΠ΅. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ hide() пСрСдаСтся массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² BerylliumSphere. Π•Π³ΠΎ Π²Ρ‹Π·ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

hide(d);

ΠΎΠ΄Π½Π°ΠΊΠΎ массив, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ динамичСски:

hide(new BerylliumSphere[]{ new Beryl 1iumSphere(). new BerylliumSphereО });

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ситуациях Ρ‚Π°ΠΊΠΎΠΉ синтаксис оказываСтся Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

a=d;

ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π²Π·ΡΡ‚ΡŒ ссылку, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ массива, ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ массива, ΠΊΠ°ΠΊ это дСлаСтся с Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ and ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массива Π² ΠΊΡƒΡ‡Π΅.

Вторая Ρ‡Π°ΡΡ‚ΡŒ ArrayOptions.java ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ массивы Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ массивы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ значСния ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Π½ΠΈΡ… Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ массива

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Ρ†Π΅Π»Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Π‘ ΠΈ Π‘++, это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Π»Π΅Π³ΠΊΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ возвращаСтся ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ массив, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив.

ΠŸΡ€ΠΈ этом Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ слоТности с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ массива ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ памяти.

Π’ Java Π²Ρ‹ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ массив. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Π½Π΅ΠΌ β€” массив Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½, Π° ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π² Π½Π΅ΠΌ ΠΎΡ‚ΠΏΠ°Π΄Π΅Ρ‚, массив Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ ΡƒΠ±ΠΎΡ€Ρ‰ΠΈΠΊΠΎΠΌ мусора. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ массива String:

//: arrays/IceCream.java // Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ массивов ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² import java.util.*;

public class IceCream {

private static Random rand = new Random(47); static final String[] FLAVORS = {

"Chocolate". "Strawberry", "Vanilla Fudge Swirl". "Mint Chip". "Mocha Almond Fudge". "Rum Raisin". "Praline Cream". "Mud Pie"

}:

public static String[] flavorSet(int n) { if(n > FLAVORS.length)

throw new IllegalArgumentExceptionC'Set too big"); String[] results = new StringCn]; boolean[] picked = new boolean[FLAVORS.length]; for(int i = 0; i < n; i++) { int t; do

t = rand.nextInt(FLAVORS.length); while(picked[t]); results[i] = FLAVORSCt]: picked[t] = true;

}

return results;

}

public static void main(String[] args) { for(int i = 0; i < 7; i++)

System.out.pri ntin(Arrays.toStri ng(f1 avorSet(3)));

}

} /* Output;

[Rum Raisin. Mint Chip. Mocha Almond Fudge] [Chocolate, Strawberry. Mocha Almond Fudge] [Strawberry. Mint Chip, Mocha Almond Fudge] [Rum Raisin. Vanilla Fudge Swirl. Mud Pie] [Vanilla Fudge Swirl. Chocolate, Mocha Almond Fudge] [Praline Cream. Strawberry. Mocha Almond Fudge] [Mocha Almond Fudge, Strawberry. Mint Chip] *///:-

ΠœΠ΅Ρ‚ΠΎΠ΄ flavorSet() создаСт массив results с элСмСнтами String. Π Π°Π·ΠΌΠ΅Ρ€ массива Ρ€Π°Π²Π΅Π½ ΠΏ; ΠΎΠ½ опрСдСляСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π”Π°Π»Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ элСмСнты ΠΈΠ· массива FLAVORS ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΈΡ… Π² массив results, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Массив возвращаСтся Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, β€” ΠΏΠΎ ссылкС. ΠŸΡ€ΠΈ этом Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Π±Ρ‹Π» Π»ΠΈ массив создан ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ flavorSet(), ΠΈΠ»ΠΈ ΠΎΠ½ Π±Ρ‹Π» создан Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. Массив останСтся с Π²Π°ΠΌΠΈ всС врСмя, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ΅Π½, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠ±ΠΎΡ€Ρ‰ΠΈΠΊ мусора позаботится ΠΎ Π΅Π³ΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Из Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ flavorSet() Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ случайноС подмноТСство элСмСнтов ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅.

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² Java Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ особых слоТностСй. Для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки: