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

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

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

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Generated, ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· классов CountingGenerator, описанных Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅:

II: arrays/TestGenerated.java import java.util.*; import net.mindview util.*:

public class TestGenerated {

public static void main(String[] args) { Integer[] a = { 9. 8. 7. 6 }: System.out.pri ntin(Arrays.toStri ng(a)); a = Generated, array (a, new CountingGenerator.IntegerO); System. out. pri nti n( Arrays. toStri ng(a)): Integer[] b = Generated.array(Integer.class.

new CountingGenerator.IntegerO, 15): System, out. pri nti n(Arrays. toStri ng(b)):

}

} /* Output: [9. 8, 7. 6] [0. 1. 2. 3]

[0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14] *///:-

Π₯отя массив Π° инициализируСтся, эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Generated.array(). Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ b ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ массив «с нуля».

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ, поэтому для заполнСния ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… массивов Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΡ‹ создадим ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Β«ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΊΒ» ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² массив ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π‘Π΅Π· Π½Π΅Π³ΠΎ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ спСциализированныС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для всСх ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ².

//: net/mi ndvi ew/uti1/ConvertTo.java

package net.mi ndvi ew.uti1;

public class ConvertTo {

public static booleanC] primitive(Boolean[] in) { boolean[] result = new boolean[in.length], for(int i = 0; i < in.length; i++)

result[i] = in[i]; // АвтоматичСская распаковка return result;

}

public static chart] primitive(Character[] in) { chart] result = new char[in.length]; for(int i = 0; i < in.length; i++)

result[i] = in[i]; return result;

}

public static byte[] primitive(Bytet] in) { bytet] result = new bytetin.length]; for(int i = 0; i < in.length; i++)

resultti] = inti]; return result;

}

public static shortt] primitive(Short[] in) { shortt] result = new shorttin.length]; for(int i = 0; i < in.length; i++)

resultti] = inti]; return result;

}

public static int[] primitivedntegert] in) { intt] result = new int[in.length]: for(int i = 0; i < in.length; i++)

resultti] = inti]; return result;

}

public static longt] primitive(Longt] in) { longt] result = new longtin.length]; for(int i = 0; i < in.length; i++)

resultti] = inti]; return result;

}

public static floatt] primitive(Float[] in) { floatt] result = new floatCin.length]: for(int i = 0; i < in.length, i++)

resultti] = inti]; return result;

public static doublet] primitive(Double[] in) { doublet] result = new double[in.length]; for(int i = 0; i < in.length; i++)

result[i] = in[i]; return result;

}

} /// ~

КаТдая вСрсия primitive() создаСт ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ массив ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ элСмСнты ΠΈΠ· массива in. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ автоматичСской распаковки Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ

result[i] = in[i];

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ConvertTo с ΠΎΠ±Π΅ΠΈΠΌΠΈ вСрсиями Generated.array():

//: arrays/PrimitiveConversionDemonstration.java import java.util.*; import net.mindview.util.*;

public class PrimitiveConversionDemonstration { public static void main(String[] args) {

IntegerC] a = Generated.array(Integer.class,

new CountingGenerator.IntegerO. 15); int[] b = ConvertTo.primitive(a); System.out.pri ntin(Arrays.toStri ng(b)); boolean[] с = ConvertTo.primitive(

Generated.array(Boolean.class.

new CountingGenerator.BooleanO, 7)); System. out. pri nti n(Arrays. toStri ng(c));

}

} /* Output:

[0. 1. 2, 3, 4, 5, 6. 7. 8. 9. 10. 11. 12. 13. 14] [true, false, true, false, true, false, true] *///:-

НаконСц, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° тСстируСт инструмСнтарий создания массивов с классами RandomGenerator:

//: arrays/TestArrayGeneration.java

// Test the tools that use generators to fill arrays.

import java.util.*;

import net.mindview.util.*;

import static net.mindview.util .Print.*;

public class TestArrayGeneration {

public static void main(String[] args) { int size = 6;

boolean[] al = ConvertTo.primitive(Generated.array(

Bool ean. class, new RandomGenerator.BooleanO, size)); printC'al = " + Arrays.toString(al)); byte[] a2 = ConvertTo.primitive(Generated.array(

Byte.class, new RandomGenerator.Byte(), size)); print("a2 = " + Arrays.toString(a2)); char[] a3 = ConvertTo.primitive(Generated.array( Character.class,

new RandomGenerator.CharacterO, size)); print("a3 = " + Arrays.toString(a3)); ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ & short[] Π°4 = ConvertTo.primitive(Generated.array(

Short.class, new RandomGenerator.ShortО. size)); print("a4 = " + Arrays.toString(a4)); int[] a5 = ConvertTo primitive(Generated.array(

Integer.class, new RandomGenerator.IntegerO. size)); print("a5 = " + Arrays.toString(a5)); long[] a6 = ConvertTo.primitive(Generated array(

Long.class, new RandomGenerator.Long(). size)), print("a6 = " + Arrays.toString(a6)); floatt] a7 = ConvertTo.primitive(Generated.array(

Float.class, new RandomGenerator.FloatО. size)); print("a7 = " + Arrays.toString(a7)); doubled a8 = ConvertTo primitive(Generated.array(

Double.class, new RandomGenerator.DoubleO, size)); print("a8 = " + Arrays.toString(a8));

}

} /* Output:

al = [true, false, true, false, false, true] a2 = [104, -79, -76, 126, 33, -64] a3 = [Z, n, T, c. Q. r]

a4 = [-13408, 22612, 15401, 15161, -28466, -12603] a5 = [7704, 7383, 7706, 575, 8410, 6342] a6 = [7674, 8804, 8950, 7826, 4322, 896] a7 = [0.01, 0.2, 0.4, 0.79, 0.27, 0.45] a8 = [0 16, 0.87, 0.7, 0.66, 0.87, 0.59] *///:-

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, всС вСрсии ConvertTo.primitive() Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инструмСнтарий Arrays

Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ java.util Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ класс Arrays, содСрТащий Π½Π°Π±ΠΎΡ€ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡˆΠ΅ΡΡ‚ΡŒ: equals() сравниваСт Π΄Π²Π° массива (Ρ‚Π°ΠΊΠΆΠ΅ сущСствуСт вСрсия deepEquals() для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов); fill() Π±Ρ‹Π» описан Ρ€Π°Π½Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅; sort() сортируСт массив; binarySearch() ΠΈΡ‰Π΅Ρ‚ элСмСнт Π² отсортированном массивС; toStringQ создаСт прСдставлСниС массива Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ String, a hashCode() Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ…Π΅Ρˆ-ΠΊΠΎΠ΄ массива. ВсС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ для всСх ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Object. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ Arrays.asList() ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ массив Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ List (см. Π³Π»Π°Π²Ρƒ 11).

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Arrays, слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π΅ входящий Π² Arrays.

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java содСрТит статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ System.arraycopy(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ массивы Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ for. ΠœΠ΅Ρ‚ΠΎΠ΄ System.arraycopy() ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со всСми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для'массивов int:

//: arrays/CopyingArrays.java // Using System.arraycopyO

import java.util.*;

import static net.mindview.util.Print.*;

public class CopyingArrays {

public static void main(String[] args) { int[] i = new int[7]; int[] j = new int[10]; Arrays.fill(i. 47); Arrays.fill(j. 99); printC'i = " + Arrays.toString(i)); printC'j = " + Arrays.toString(j)); System.arraycopy(i. 0. j. 0. i.length); printC'j = " + Arrays.toString(j)); int[] ΠΊ = new int[5]; Arrays.fill(k. 103); System.arraycopy(i. 0. ΠΊ. 0. ΠΊ length); printC'k = " + Arrays.toString(k)); Arrays.fill(k, 103); System.arraycopy(k, 0. i, 0, k.length); printC'i = " + Arrays.toString(i)); // ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹:

IntegerC] u = new Integer[10];

Integer[] v = new Integer[5];

Arrays.fill(u. new Integer(47));

Arrays.fill(v. new Integer(99));

printC'u = " + Arrays.toString(u));

printC'v = " + Arrays.toString(v));

System.arraycopy(v. 0. u. u.length/2, v.length);

printC'u = " + Arrays.toString(u));

}

} /* Output:

i = [47. 47. 47. 47. 47. 47. 47] j = [99. 99. 99. 99. 99. 99. 99. 99. 99. 99] j = [47. 47. 47. 47. 47. 47. 47. 99. 99. 99] k = [47. 47. 47. 47. 47] i = [103. 103. 103. 103. 103. 47. 47] u = [47. 47. 47. 47. 47. 47. 47. 47. 47. 47] v = [99. 99. 99. 99. 99] u = [47. 47. 47. 47. 47. 99. 99. 99. 99. 99] *///:-

Π’ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… arraycopy() пСрСдаСтся исходный массив, Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ позиция копирования Π² исходном массивС, ΠΏΡ€ΠΈΠ΅ΠΌΠ½Ρ‹ΠΉ массив, Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ позиция копирования Π² ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΎΠΌ массивС ΠΈ количСство ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов. ЕстСствСнно, любоС Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ† массива ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ массивы. Однако ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… массивов ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылки, Π½ΠΎ Π½Π΅ сами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Вакая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° называСтся повСрхностным ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

System.arraycopy() Π½Π΅ выполняСт Π½ΠΈ автоматичСской ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, Π½ΠΈ автоматичСской распаковки β€” Ρ‚ΠΈΠΏΡ‹ Π΄Π²ΡƒΡ… массивов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ массивов

Класс Arrays содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ equals() для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° равСнство Ρ†Π΅Π»Ρ‹Ρ… массивов. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈ Object. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π²Π° массива ΡΡ‡ΠΈΡ‚Π°Π»ΠΈΡΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство элСмСнтов, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ эквивалСнтСн ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ массива (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° осущСствляСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ equals() для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹; для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ equals() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Β«ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈΒ» β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Integer. equals() для int). ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

// arrays/ComparingArrays java // Using Arrays equals() import java.util.*;

import static net.mindview.util Print.*;

public class ComparingArrays {

public static void main(String[] args) { int[] al = new int[10]; int[] a2 = new int[10]; Arrays.filHal. 47); Arrays.fill(a2, 47); print(Arrays.equals(al, a2)); a2[3] = 11;

print(Arrays.equals(al, a2)); String[] si = new String[4]; Arrays fill(si. "Hi");

String[] s2 = { new StringC'Hi"), new StringC'Hi"),

new StringC'Hi"). new StringC'Hi") }; print(Arrays equals(sl. s2)),

}

} /* Output

true

false

true *///β€’-

Π‘Π½Π°Ρ‡Π°Π»Π° массивы al ΠΈ a2 ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, поэтому Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сравнСния Ρ€Π°Π²Π΅Π½ true, Π½ΠΎ послС измСнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ false. Π’ послСднСм случаС всС элСмСнты si ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ s2 содСрТит ΠΏΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Однако ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° равСнства опрСдСляСтся содСрТимым (с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Object.equals()), поэтому Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π²Π΅Π½ true.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ элСмСнтов массивов

БравнСния, выполняСмыС Π² Ρ…ΠΎΠ΄Π΅ сортировки, зависят ΠΎΡ‚ фактичСского Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сортировки для всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ придСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ появлСнии Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

Π“Π»Π°Π²Π½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ проСктирования являСтся Β«ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ, ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΒ». Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ остаСтся ΠΎΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки, Π° измСняСтся способ сравнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ сравнСния Π² Ρ€Π°Π·Π½Ρ‹Ρ… функциях сортировки, ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ проСктирования «стратСгия». Π’ этом ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π΅ пСрСмСнная Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° инкапсулируСтся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ классС. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ стратСгии пСрСдаСтся ΠΊΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΈ послСдний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ своСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. ΠŸΡ€ΠΈ этом Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ способы сравнСния, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ сортировки.

Π’ Java Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сравнСния ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ двумя способами. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ основан Π½Π° «СстСствСнном» ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ сравнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² класс ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ java.lang.Comparable β€” ΠΎΡ‡Π΅Π½ΡŒ простого интСрфСйса с СдинствСнным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ compareTo(). Π’ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. Он Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ мСньшС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π½ΡƒΠ»ΡŒ ΠΏΡ€ΠΈ равСнствС ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ большС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.