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

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

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

Π’Ρ‹ Π½Π΅ обязаны Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°. ВосходящСС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ:

//: hoiding/GenericsAndUpcasting.java import java.util.*;

class GrannySmith extends Apple {}

class Gala extends Apple {}

class Fuji extends Apple {}

class Braeburn extends Apple {}

public class GenericsAndUpcasting {

public static void main(String[] args) {

ArrayList<Apple> apples = new ArrayList<Apple>();

apples.add(new GrannySmithO);

apples.add(new GalaO);

apples.add(new Fuji()):

apples.add(new BraeburnO);

for(Apple с : apples)

System.out.println(c);

}

} /* Output: (Sample) GrannySmi [email protected] [email protected] [email protected] [email protected] *///:-

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, рассчитанный Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Apple, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠΎΠ², ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΎΡ‚ Apple.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ…, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° toStringO ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Object, выводится имя класса с Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ прСдставлСниСм Ρ…Π΅Ρˆ-ΠΊΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (сгСнСрированного ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ hashCode()).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Java ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² дСлится Π½Π° Π΄Π²Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… интСрфСйсов Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

β€’ ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ: Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов, сформированная ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ. Класс List (список) Ρ…Ρ€Π°Π½ΠΈΡ‚ элСмСнты Π² порядкС вставки, Π² классС Set (мноТСство) нСльзя Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ элСмСнты, Π° класс Queue (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ) Π²Ρ‹Π΄Π°Π΅Ρ‚ элСмСнты Π² порядкС, опрСдСляСмом спСцификой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это порядок вставки элСмСнтов Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ).

β€’ ΠšΠ°Ρ€Ρ‚Π°: Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Β«ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β», с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ. ArrayList позволяСт ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ порядковым Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌ, поэтому Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС ΠΎΠ½ связываСт числа с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Класс Map (ΠΊΠ°Ρ€Ρ‚Π° β€” Ρ‚Π°ΠΊΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ассоциативный массив ΠΈ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ) позволяСт ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ значСния ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΊΠ»ΡŽΡ‡Π°, ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с поиском опрСдСлСния ΠΏΠΎ слову.

Π₯отя Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это Π½Π΅ всСгда Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΠΈΠ΄Π΅Π°Π»Π΅ вСсь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π² расчСтС Π½Π° взаимодСйствиС с этими интСрфСйсами, Π° Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ указываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ создания. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ List ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан Ρ‚Π°ΠΊ:

List<Apple> apples = new ArrayList<Apple>():

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° восходящСС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ArrayList ΠΊ List, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². Если ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, достаточно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ создания:

List<Apple> apples = new LinkedList<Apple>();

Π˜Ρ‚Π°ΠΊ, Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ ситуации Π²Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ класса, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚Π΅ Π΅Π³ΠΎ Π΄ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйса, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ интСрфСйс Π²ΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ всСгда, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ классы ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. НапримСр, LinkedList содСрТит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π΅ входящиС Π² интСрфСйс List, Π° Π’Π³Π΅Π΅ΠœΠ°Ρ€ β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π΅ входящиС Π² Map. Если Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, восходящСС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΌΡƒ интСрфСйсу Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Collection прСдставляСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°ΠΊ способа хранСния Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ интСрфСйс Collection (прСдставлСнный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ArrayList) заполняСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Integer, с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ всСх элСмСнтов ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:

//: hoiding/SimpleCol1ection.java

import java.util .*;

public class SimpleCollection {

public static void main(String[] args) {

Collection<Integer> с = new ArrayList<Integer>(); for(int i = 0; i < 10; i++)

c.add(i); // АвтоматичСская ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° for(Integer i : c)

System.out.print(i + ". ");

}

} /* Output:

0. 1. 2. 3. 4, 5. 6. 7, 8-. 9.

*///β€’-

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Collection, ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого класса, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ Collection, Π½ΠΎ ArrayList являСтся самым ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

' ВсС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π² синтаксисС foreach, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ПозднСС Π² этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСна другая, Π±ΠΎΠ»Π΅Π΅ гибкая концСпция ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏ элСмСнтов

БСмСйства Arrays ΠΈ Collections Π² java.util содСрТат Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π³Ρ€ΡƒΠΏΠΏ элСмСнтов Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄ Arrays.asList() ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ массив, Π»ΠΈΠ±ΠΎ список элСмСнтов, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми, ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ List. ΠœΠ΅Ρ‚ΠΎΠ΄ Collections.addAUQ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Collection ΠΈ Π»ΠΈΠ±ΠΎ массив, Π»ΠΈΠ±ΠΎ список, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ запятыми, ΠΈ добавляСт элСмСнты Π² Collection. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

//β€’ hoiding/AddingGroups java

// Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏ элСмСнтов Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Collection

import java.util *;

public class AddingGroups {

public static void main(String[] args) { Collection<Integer> collection =

new ArrayList<Integer>(Arrays.asList(l, 2, 3, 4, 5)); Integer[] morelnts = { 6. 7. 8. 9. 10 }; collection.addAll(Arrays.asList(morelnts)); // Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ способом // Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Collection: Collections.addAll(collection, 11, 12, 13, 14, 15); Col lections.addAll(collection, morelnts); // Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ список Π½Π° основС массива: List<Integer> list = Arrays.asList(16. 17, 18, 19, 20); list set(l, 99); // МоТно - ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ элСмСнта // list.add(21); // Ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния - Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ // массив Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ…

}

} ///:-

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Collection ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Collection, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, поэтому для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Arrays.asList(). Однако ΠΌΠ΅Ρ‚ΠΎΠ΄ Collections.addAll() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, ΠΈ Π²Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ успСхом ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Collection Π±Π΅Π· элСмСнтов, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Collections.addAll β€” этот способ считаСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρƒ Collection.addAll() Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Collection, поэтому ΠΎΠ½ уступаСт Π² гибкости ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Arrays.asList() ΠΈ Collections.addAll(), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ списки Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Arrays.asList() Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π² Π²ΠΈΠ΄Π΅ List, Π½ΠΎ Π² этом случаС Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ прСдставлСниСм Π±ΡƒΠ΄Π΅Ρ‚ массив, Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². Π’Ρ‹Π·ΠΎΠ² add() ΠΈΠ»ΠΈ delete() для Ρ‚Π°ΠΊΠΎΠ³ΠΎ списка ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, Π° это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС Π²ΠΎ врСмя выполнСния.

НСдостаток Arrays.asList() Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ пытаСтся Β«Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒΒ» ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ List, Π½Π΅ обращая внимания Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ присваиваСтся. Иногда это создаСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

//: hoiding/AsListInference.java // Arrays.asListO makes its best guess about type, import java.util.*;

class Snow {}

class Powder extends Snow {} class Light extends Powder {} class Heavy extends Powder {} class Crusty extends Snow {} class Slush extends Snow {}

public class AsListInference {

public static void main(String[] args) { List<Snow> snowl = Arrays.asList(

new CrustyO. new SlushO. new PowderO);

// He компилируСтся-// List<Snow> snow2 = Arrays.asList( // new LightO. new HeavyO); // Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ компилятора: //found java.util.List<Powder> // required, java util List<Snow>

II Collections.addAllО Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ:

List<Snow> snow3 = new ArrayList<Snow>():

Col 1 ecti ons. addAl 1 (snow3, new LightO. new HeavyO);

II ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ посрСдством уточнСния // Ρ‚ΠΈΠΏΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°

List<Snow> snow4 = Arrays <Snow>asList( new LightO, new HeavyO),

}

} ///:-

ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ создания snow2, Arrays.asList() создаСт List<Powder> вмСсто List <Snow>, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Collections.addAll() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ‚ΠΈΠΏ опрСдСляСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· создания snow4, Π² Π²Ρ‹Π·ΠΎΠ² Arrays.asList() ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ «подсказку», которая сообщаСт компилятору фактичСский Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° List, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Arrays.asList().

Π‘ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Map Π΄Π΅Π»ΠΎ обстоит слоТнСС, ΠΈ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Π½Π΅ прСдоставляСт срСдств ΠΈΡ… автоматичСской ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎ содСрТимому Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Map.

Π’Ρ‹Π²ΠΎΠ΄ содСрТимого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²

Для получСния ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΎΠ³ΠΎ прСдставлСния массива Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Arrays.toString, Π½ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ выводятся ΠΈ Π±Π΅Π· постороннСй ΠΏΠΎΠΌΠΎΡ‰ΠΈ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт использованиС основных Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²:

II: ell:Printi ngContai ners.java II Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ import java.util.*;

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

public class PrintingContainers {

static Collection fill(Collection<String> collection) { collection. addC'rat"): collection.addC'cat"); collection.adde'dog"): col lection.add("dog"); return collection;

}

static Map fill(Map<String,String> map) {

map. put ("rat", "Fuzzy"); ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &

map.put("cat". "Rags"), Ρ‚Π°Ρ€.put("dog". "Bosco"); map.put("dog", "Spot"); return map;

}

public static void main(String[] args) {

pri nt(fi11(new ArrayLi st<Stri ng>())); print(fill(new LinkedList<String>())); pri nt(fi11(new HashSet<Stri ng>())); pri nt(fi11(new TreeSet<Stri ng>())); pri nt(fi11(new Li nkedHashSet<Stri ng>())); pri nt(fi11(new HashMap<Stri ng.Stri ng>())); print(fill(new TreeMap<String,String>())); print(fi11(new LinkedHashMap<String,String>()));

}

} /* Output: [rat, cat, dog, dog] [rat, cat. dog, dog] [dog, cat, rat] [cat, dog, rat] [rat. cat. dog]

{dog=Spot. cat=Rags, rat=Fuzzy} {cat=Rags, dog=Spot, rat=Fuzzy} {rat=Fuzzy, cat=Rags, dog=Spot} *///:-

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ упомянуто, Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Java сущСствуСт Π΄Π²Π΅ основныС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Ρ‚Π΅ΠΌ, сколько Π² ΠΎΠ΄Π½ΠΎΠΉ ячСйкС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° «помСщаСтся» элСмСнтов. ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (Collection) содСрТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ячСйкС. К этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ относятся список (List), Π³Π΄Π΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ хранится Π³Ρ€ΡƒΠΏΠΏΠ° элСмСнтов, мноТСство (Set), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ элСмСнту ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (Queue). Π’ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… Map (ΠΊΠ°Ρ€Ρ‚Π°) хранятся Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: ΠΊΠ»ΡŽΡ‡ ΠΈ связанноС с Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Из Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (обСспСчиваСмый ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ toStringO ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°) Π΄Π°Π΅Ρ‚ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Collection выводится Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках, с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ элСмСнтов запятыми. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Map Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π·Π½Π°ΠΊΠΎΠΌ равСнства (ΠΊΠ»ΡŽΡ‡ΠΈ слСва, значСния справа).

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ArrayList ΠΈ LinkedList ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ сСмСйству List, ΠΈ ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ элСмСнты Π² Π½ΠΈΡ… хранятся Π² порядкС вставки. Они Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ выполнСния Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½ΠΎ ΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ LinkedList содСрТит большС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‡Π΅ΠΌ ArrayList.