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

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

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

ΠœΠ°ΡΡΠΈΠ²Ρ‹ сущСствовали Π² Java ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π΄Π²Π° класса для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ эффСктивной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: Hashtable ΠΈ Vector. Π’ JDK 1.2 Π½Π°Π±ΠΎΡ€ классов, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ с коллСкциями, Π±Ρ‹Π» сущСствСнно Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½.

БущСствуСт нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² классов-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. ВсС ΠΎΠ½ΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ, ΠΏΠΎ возмоТности, Π² соотвСтствии с Π΅Π΄ΠΈΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ интСрфСйсами ΠΈ Ρ‚Π°ΠΌ, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌΠΈ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π°. Однако всС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ хранСния, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ доступа ΠΊ элСмСнтам, потрСбляСмой ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ дСталями. НапримСр, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… коллСкциях ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ элСмСнтами ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ), ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ упорядочСны, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… - Π½Π΅Ρ‚. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ допускаСтся Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… - Π½Π΅Ρ‚. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· классов-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

ΠšΠ»Π°ΡΡΡ‹, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ коллСкциями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ java.util.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Collection

Π”Π°Π½Π½Ρ‹ΠΉ интСрфСйс являСтся ΠΊΠΎΡ€Π½Π΅ΠΌ всСй ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. Он опрСдСляСт Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ любой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ - Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Collection, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ ΠΈ пустыС ( null ) значСния.

AbstractCollection, ΠΊΠ°ΠΊ абстрактный класс, слуТит основой для создания ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… классов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΈ содСрТит Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² интСрфСйсС Collection.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Set

ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ этот интСрфСйс, Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ наличия Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ². Π’ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ этого Ρ‚ΠΈΠΏΠ° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ссылки Ρ‚ΠΈΠΏΠ° null. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Set Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ интСрфСйс Collection, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, любой класс, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Set, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Collection. Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, добавляСмый Π² Set, Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ equals, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ.

AbstractSet, являясь абстрактным классом, прСдставляСт собой основу для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² интСрфСйса Set.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ List

ΠšΠ»Π°ΡΡΡ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ этот интСрфСйс, содСрТат ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ хранятся Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹). Π’ JDK 1.2 Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½ класс Vector, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс List. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ List Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ интСрфСйс Collection, ΠΈ любой класс, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ List, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Collection, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя вводятся Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты ΠΈΠ· списка. List Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт ListIterator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π²ΠΏΠ΅Ρ€Π΅Π΄, Ρ‚Π°ΠΊ ΠΈ Π½Π°Π·Π°Π΄ ΠΏΠΎ элСмСнтам списка.

AbstractList, ΠΊΠ°ΠΊ абстрактный класс, прСдставляСт собой основу для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² интСрфСйса List.



Рис. 14.1. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Map

ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ этот интСрфСйс, хранят нСупорядочСнный Π½Π°Π±ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠΈ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Hashtable послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² JDK 1.2 Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Map. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ слСдования ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Map Π½Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ интСрфСйс Collection. AbstractMap, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ абстрактным классом, прСдставляСт собой основу для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² интСрфСйса Map.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ SortedSet

Π­Ρ‚ΠΎΡ‚ интСрфСйс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Set, трСбуя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ содСрТимоС Π½Π°Π±ΠΎΡ€Π° Π±Ρ‹Π»ΠΎ упорядочСно. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Comparable, Π»ΠΈΠ±ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ с использованиСм внСшнСго Comparator.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ SortedMap

Π­Ρ‚ΠΎΡ‚ интСрфСйс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Map, трСбуя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ содСрТимоС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π±Ρ‹Π»ΠΎ упорядочСно ΠΏΠΎ значСниям ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Iterator

Π’ Java 1 для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ использовался интСрфСйс Enumeration. Π’ Java 2 для этих Ρ†Π΅Π»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Iterator. ВсС классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Collection, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ iterator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс Iterator. Iterator вСсьма ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Enumeration, с Ρ‚Π΅ΠΌ лишь ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ remove, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Iterator Π±Ρ‹Π» создан.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, подводя ΠΈΡ‚ΠΎΠ³, пСрСчислим интСрфСйсы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с коллСкциями:


java.util.Collection

java.util.Set

java.util.List

java.util.Map

java.util.SortedSet

java.util.SortedMap

java.util.Iterator


AбстрактныС классы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с коллСкциями

java.util.AbstractCollection - Π΄Π°Π½Π½Ρ‹ΠΉ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² интСрфСйсС Collection, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ iterator ΠΈ size, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅Ρ‰Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ public void add(Object o) (Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ UnsupportedOperationException ).



Рис. 14.2. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ абстрактныС классы.

НСобходимо Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π° конструктора: Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Collection. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ. Π”Π°Π½Π½Ρ‹ΠΉ класс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ классами AbstractList ΠΈ AbstractSet.

java.util.AbstractList - этот класс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ AbstractCollection ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс List. Для создания Π½Π΅ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ списка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ public Object get(int index) ΠΈ public int size(). Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ списка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ public void set(int index,Object element) (Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ UnsupportedOperationException ).

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ AbstractCollection, Π² этом случаС Π½Π΅Ρ‚ нСобходимости Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ iterator, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа ΠΊ элСмСнтам списка get, set, add, remove.

java.util.AbstractSet - Π΄Π°Π½Π½Ρ‹ΠΉ класс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ AbstractCollection ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π² интСрфСйсС Set. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот класс Π½Π΅ пСрСопрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π² классС AbstractCollection.

java.util.AbstractMap - этот класс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π² интСрфСйсС Map. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ класса, унаслСдованного ΠΎΡ‚ AbstractMap, достаточно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ entrySet, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΊ Ρ‚ΠΈΠΏΡƒ AbstractSet. Π­Ρ‚ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ ( Set ) Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для добавлСния ΠΈ удалСния элСмСнтов ΠΈΠ· Π½Π°Π±ΠΎΡ€Π°. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ класса Map Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ put ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ entrySet().iterator(), ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° remove.

java.util.AbstractSequentialList - этот класс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ AbstractList ΠΈ являСтся основой для класса LinkedList. ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ AbstractList Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ этот класс обСспСчиваСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Π½ΠΎ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ элСмСнтам списка, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² get(int index), set(int index, Object element), add(int index, Object element) ΠΈ remove(int index). Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ класс, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ listIterator ΠΈ size. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, Ссли рСализуСтся Π½Π΅ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ список, для ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° достаточно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ hasNext, next, hasPrevious, previous ΠΈ index. Для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ списка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ set, Π° для списков ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π΅Ρ‰Π΅ ΠΈ add, ΠΈ remove.

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ классы ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

java.util.ArrayList - этот класс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ AbstractList ΠΈ вСсьма ΠΏΠΎΡ…ΠΎΠΆ Π½Π° класс Vector. Он Ρ‚Π°ΠΊΠΆΠ΅ динамичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ Vector, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ синхронизированными, вслСдствиС Ρ‡Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π½ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ быстрСС. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ синхронизированной вСрсиСй ArrayList, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:


List l = Collections.synchronizedList(new ArrayList(...));

public class Test {

public Test() {


}

public static void main(String[] args) {

Test t = new Test();

ArrayList al = new ArrayList();

al.add("First element");

al.add("Second element");

al.add("Third element");

Iterator it = al.iterator();

while(it.hasNext()) {

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

}

System.out.println("\n");

al.add(2,"Insertion");

it = al.iterator();

while(it.hasNext()) {

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

}

}

}

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

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


First element

Second element

Third element


Firts element

Second element

Insertion

Third element

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

java.util.LinkedList - прСдставляСт собой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ интСрфСйса List. Он Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйса List, ΠΏΠΎΠΌΠΈΠΌΠΎ этого Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π΅Ρ‰Π΅ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ элСмСнты Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΈ Π½Π°Ρ‡Π°Π»Π΅ списка. LinkedList являСтся двухсвязным списком ΠΈ позволяСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π² ΠΊΠΎΠ½Π΅Ρ† списка, Ρ‚Π°ΠΊ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. LinkedList ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ стСка.

public class Test {

public Test() {


}

public static void main(String[] args) {

Test test = new Test();

LinkedList ll = new LinkedList();

ll.add("Element1");

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