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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° JavaΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 77

Автор Н.А. Вязовик

ll.addFirst("Element2");

ll.addFirst("Element3");

ll.addLast("Element4");

test.dumpList(ll);

ll.remove(2);

test.dumpList(ll);

String element = (String)ll.getLast();

ll.remove(element);

test.dumpList(ll);

}

private void dumpList(List list) {

Iterator it = list.iterator();

System.out.println();

while(it.hasNext()) {

System.out.println((String)it.next());

}

}

}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 14.17.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚:


Element3

Element2

Element1

Element4

Element3

Element2

Element4

Element3

Element2

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 14.18.

ΠšΠ»Π°ΡΡΡ‹ LinkedList ΠΈ ArrayList ΠΈΠΌΠ΅ΡŽΡ‚ ΡΡ…ΠΎΠΆΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Однако с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. Π’Π°ΠΊ, Π² ArrayList Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ быстрСй (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° порядок) ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ всСму списку (ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ) ΠΈ получСния Π΄Π°Π½Π½Ρ‹Ρ…. LinkedList ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π° порядок быстрСС выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ удалСния ΠΈ добавлСния Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов.

java.util.Hashtable - Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ абстрактный класс Dictionary. Π’ JDK 1.2 класс Hashtable Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Map. Hashtable ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Из самого названия слСдуСт, Ρ‡Ρ‚ΠΎ HΠ°shtable ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ для увСличСния скорости доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

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

Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ поиска, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Java унаслСдован ΠΎΡ‚ Object. Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, hash ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ экзСмпляр класса Object ΠΈ, соотвСтствСнно, всС экзСмпляры классов, унаслСдованных ΠΎΡ‚ Object. Π­Ρ‚ΠΎ число Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ hashCode(). ИмСнно ΠΎΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ сохранСнии ΠΊΠ»ΡŽΡ‡Π° Π² Hashtable ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² Π΄Π»ΠΈΠ½Ρƒ массива, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ для хранСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π½Π° ΠΊΠΎΠ΄, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π΅ΠΊΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ слуТит индСксом для хранСния ΠΊΠ»ΡŽΡ‡Π° Π² массивС array.length % hashCode().

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

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

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΈ коэффициСнт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ конструировании. НапримСр:


Hashtable ht = new Hashtable(1000,0.60)

БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 101 для Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива (Π² послСднСй вСрсии Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΎ Π΄ΠΎ 11) ΠΈ 0.75 для коэффициСнта Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

ИспользованиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ позволяСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доступа ΠΊ элСмСнтам ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ, Π° логарифмичСски. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ частом поискС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

java.util.HashMap - этот класс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ AbstractMap ΠΈ вСсьма ΠΏΠΎΡ…ΠΎΠΆ Π½Π° класс Hashtable. HashMap ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для хранСния ΠΏΠ°Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Как для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΈ для элСмСнтов Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ значСния Ρ‚ΠΈΠΏΠ° null. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ хранСния элСмСнтов Π² этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ совпадаСт с порядком ΠΈΡ… добавлСния. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ элСмСнтов Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. HashMap обСспСчиваСт постоянноС врСмя доступа для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ get ΠΈ put.

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ всСм элСмСнтам ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π° Π΅Π΅ Смкости. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎ большим, Ссли достаточно часто придСтся ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ элСмСнтам.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ HashMap Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ синхронизированными. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ внСшнюю ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π»ΠΈΠ±ΠΎ синхронизированный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

public class Test {

private class TestObject {

String text = "";

public TestObject(String text) {

this.text = text;

};

public String getText() {

return this.text;

}

public void setText(String text) {

this.text = text;

}

}

public Test() {


}

public static void main(String[] args) {

Test t = new Test();

TestObject to = null;

HashMap hm = new HashMap();

hm.put("Key1",t.new TestObject("Value 1"));

hm.put("Key2",t.new TestObject("Value 2"));

hm.put("Key3",t.new TestObject("Value 3"));

to = (TestObject)hm.get("Key1");

System.out.println("Object value for Key1 = " + to.getText() + "\n");

System.out.println("Iteration over entrySet");

Map.Entry entry = null;

Iterator it = hm.entrySet().iterator();

// Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Ρ…ΠΎΠ΄Π° Π² Map

while(it.hasNext()) {

entry = (Map.Entry)it.next();

System.out.println("For key = " + entry.getKey() + " value = " + ((TestObject)entry.getValue()).getText());

}

System.out.println();

System.out.println("Iteration over keySet");

String key = "";

// Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² Map

it = hm.keySet().iterator();

while(it.hasNext()) {

key = (String)it.next();

System.out.println( "For key = " + key + " value = " +

((TestObject)hm.get(key)).getText());

}

}

}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 14.19.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚:


Object value for Key1 = Value 1

Iteration over entrySet

For key = Key3 value = Value 3

For key = Key2 value = Value 2

For key = Key1 value = Value 1

Iteration over keySet

For key = Key3 value = Value 3

For key = Key2 value = Value 2

For key = Key1 value = Value 1

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 14.20.

java.util.TreeMap - Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ класс AbstractMap ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс SortedMap. TreeMap содСрТит ΠΊΠ»ΡŽΡ‡ΠΈ Π² порядкС возрастания. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈΠ±ΠΎ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ сравнСниС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ интСрфСйс Comparable. РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° поиска обСспСчиваСт Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния основных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ( containsKey, get, put ΠΈ remove ). Π—Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ null Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. ΠŸΡ€ΠΈ использовании Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, сохранСнный с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Π±ΡƒΠ΄Π΅Ρ‚ утСряна. НапримСр:


public class Test {

public Test() {


}

public static void main(String[] args) {

Test t = new Test();

TreeMap tm = new TreeMap();

tm.put("key","String1");

System.out.println(tm.get("key"));

tm.put("key","String2");

System.out.println(tm.get("key"));

}

}


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚:


String1

String2

Класс Collections

Класс Collections являСтся классом-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ ΠΈ содСрТит нСсколько Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с классами, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ интСрфСйсы ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. НапримСр, для сортировки элСмСнтов списков, для поиска элСмСнтов Π² упорядочСнных коллСкциях ΠΈ Ρ‚.Π΄. Но, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ свойством этого класса являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ получСния синхронизированных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² классов-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. НапримСр, для получСния синхронизированного Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Map ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:


HashMap hm = new HashMap();

:

Map syncMap = Collections.synchronizedMap(hm);

:


Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, начиная с JDK 1.2, класс Vector Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс List. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сортировки элСмСнтов, содСрТащихся Π² классС Vector.

public class Test {

private class TestObject {

private String name = "";

public TestObject(String name) {

this.name = name;

}

}

private class MyComparator implements Comparator {

public int compare(Object l,Object r) {

String left = (String)l;

String right = (String)r;

return -1 left.compareTo(right);

}

}

public Test() {


}

public static void main(String[] args) {

Test test = new Test();

Vector v = new Vector();

v.add("bbbbb");

v.add("aaaaa");

v.add("ccccc");

System.out.println("Default elements order");

test.dumpList(v);

Collections.sort(v);

System.out.println("Default sorting order");

test.dumpList(v);

System.out.println("Reverse sorting order with providing imlicit comparator");

Collections.sort(v,test.new MyComparator());

test.dumpList(v);

}

private void dumpList(List l) {

Iterator it = l.iterator();

while(it.hasNext()) {

System.out.println(it.next());

}

}

}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 14.21.

Класс Properties

Класс Properties ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для хранСния Π½Π°Π±ΠΎΡ€Π° свойств (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²). ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

String getProperty(String key)

String getProperty(String key,

String defaultValue)

ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ свойство ΠΈΠ· Π½Π°Π±ΠΎΡ€Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setProperty(String key, String value) это свойство ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ.

ΠœΠ΅Ρ‚ΠΎΠ΄ load(InputStream inStream) позволяСт Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ свойств ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° (ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 15). Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это тСкстовый Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранятся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ - это строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° ISO 8859-1. КаТдая строка Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ символами \r,\n ΠΈΠ»ΠΈ \r\n. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅Ρ†. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, состоящиС ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ², ΠΈΠ»ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ со Π·Π½Π°ΠΊΠΎΠ² ! ΠΈΠ»ΠΈ #, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Ρ‚.Π΅. ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Если строка оканчиваСтся символом /, Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка считаСтся Π΅Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ символ с Π½Π°Ρ‡Π°Π»Π° строки, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»Π°, считаСтся Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ²ΡˆΠΈΠΉΡΡ ΠΏΡ€ΠΎΠ±Π΅Π», Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ ΠΈΠ»ΠΈ Π·Π½Π°ΠΊ равСнства считаСтся ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π°. ВсС символы окончания ΠΊΠ»ΡŽΡ‡Π° ΠΏΡ€ΠΈ нСобходимости ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΎΡΡ‚ΡŒ символ \. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ встрСтился символ окончания ΠΊΠ»ΡŽΡ‡Π°, всС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ символы Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° значСния. ΠžΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ строки интСрпрСтируСтся ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ строкС, состоящСй Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· символов \t, \n, \r, \\, \", \', \ ΠΈ \uxxxx, ΠΎΠ½ΠΈ всС Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ символы. Если встрСтится сочСтаниС \ ΠΈ символа ΠΊΠΎΠ½Ρ†Π° строки, Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ всС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° строки-продолТСния.