Java Guru πŸ€“
13.3K subscribers
938 photos
15 videos
793 links
Канал с вопросами ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с собСсСдований!

По сотрудничСству ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @NadikaKir

Канал Π² ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ РКН: https://vk.cc/cJrSQZ

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
КакиС отличия ΠΌΠ΅ΠΆΠ΄Ρƒ @⁠Component, @⁠Service, @⁠Repository ΠΈ @⁠Controller?

@Component – простой способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ объявлСниС класса объявлСниСм Spring-Π±ΠΈΠ½Π°. Из всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² сканированиС (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π½Π°Π΅Ρ‚ @ComponentScan), Π±ΡƒΠ΄ΡƒΡ‚ созданы Π±ΠΈΠ½-Π΄Π΅Ρ„ΠΈΠ½ΠΈΡˆΠ½Ρ‹.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ – это алиасы Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ
@Component. Π‘Π°ΠΌΠΈ ΠΏΠΎ сСбС ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ повСдСния, ΠΈ тСхничСски Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ядра Spring Framework Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅.

Π­Ρ‚ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«Stereotype annotationsΒ». Π˜Ρ… Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ – сСмантика, логичСская Ρ€ΠΎΠ»ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:
β€’ @⁠Service – рСализация бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ;
β€’ @⁠Repository – Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…: Β«Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉΒ» ΠΈΠ· Domain-Driven Design ΠΈΠ»ΠΈ классичСский DAO;
β€’ @⁠Controller – ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π΅Π±-запросов (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
@RequestMapping)

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой сСмантикой. НапримСр, трансляция ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Persistence API Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… стСрСотипа
@Repository. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΊΡ€ΠΎΠΌΠ΅ сСмантики ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.
πŸ‘21
КакиС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Spring Data?

Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с систСмами доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ: рСляционными ΠΈ нСрСляционными Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, map-reduce Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ. Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ концСпция ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° – Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π° (Domain-driven design, DDD).

Spring Data состоит ΠΈΠ· мноТСства ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Ρ€Π°Π·Π½Ρ‹Ρ… случаСв ΠΆΠΈΠ·Π½ΠΈ. Π’ΠΎΡ‚ самыС популярныС ΠΈΠ· Π½ΠΈΡ…:

β€’ Spring Data JPA – Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Java Persistence API, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Hibernate.
β€’ Spring Data JDBC – Π±ΠΎΠ»Π΅Π΅ простой ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅ΠΌ JPA Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ для JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ².
β€’ Spring Data REST – созданиС Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… hypermedia-driven RESTful сСрвисов Π½Π° основС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π².
β€’ Spring Data KeyValue – Ρ€Π°Π±ΠΎΡ‚Π° с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
β€’ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰: MongoDB, Redis, Cassandra, LDAP, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ….
πŸ‘27
Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Spring Data

Основная Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Spring Data строится Π²ΠΎΠΊΡ€ΡƒΠ³ интСрфСйса Repository. Π­Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹ΠΉ интСрфСйс. ΠžΡ‚ Π½Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ интСрфСйсы-спСциализации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ содСрТат ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сущностями Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ВсС эти интСрфСйсы ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ двумя Ρ‚ΠΈΠΏΠ°ΠΌΠΈ: самой сущности ΠΈ Π΅Ρ‘ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.

CrudRepository – Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ сущностями: созданиС, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (CRUD).

PagingAndSortingRepository – добавляСт ΠΊ CRUD Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ постраничной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ сортировкой.

JpaRepository – Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ Java Persistence API. ДобавляСт ряд ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ flush ΠΈ deleteInBatch.

MongoRepository – Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ PagingAndSortingRepository, спСцифичноС для MongoDB.

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, спСцифичныС для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ интСрфСйсы-наслСдники. ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ… добавляСмых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ сам создаёт ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.
πŸ‘10πŸ”₯6❀1
Π§Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, ArrayList ΠΈΠ»ΠΈ LinkedList?

Π‘Π°ΠΌΡ‹ΠΉ ΠΈΠ·Π±ΠΈΡ‚Ρ‹ΠΉ вопрос. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ Π·Π½Π°Π½ΠΈΠ΅ особСнностСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (кишки ArrayList, кишки LinkedList) ΠΈ эффСктивности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² этих Ρ€Π°Π·Π½Ρ‹Ρ… рСализациях. Π’ вопрос ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Vector – пСрСсинхронизированный ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ArrayList, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Collections.synchronizedList().

ArrayList Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² массивС, LinkedList Π² двусвязном спискС. Из этого Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² эффСктивности Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ: ArrayList Π»ΡƒΡ‡ΡˆΠ΅ справляСтся с измСнСниями Π² сСрСдинС ΠΈ ростом Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… capacity, LinkedList – Π½Π° краях. Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ArrayList Π»ΡƒΡ‡ΡˆΠ΅.

Π‘Ρ‚ΠΎΠΈΡ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° краях Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для этого спроСктированного интСрфСйса Deque: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ArrayDeque.
πŸ‘34🀣3πŸ”₯2
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘10
Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· ArrayList ΠΏΡ€ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ?

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ формулируСтся Π² Π²ΠΈΠ΄Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Β«Ρ‡Ρ‚ΠΎ здСсь Π½Π΅ Ρ‚Π°ΠΊΒ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

for (String item : arrayList)
if (item.length() > 2)
arrayList.remove(item);

ΠŸΠΎΠ΄Π²ΠΎΡ… Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ArrayList, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Ρ†ΠΈΠΊΠ»Π° for, являСтся fail-fast, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ. А ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ модификация случаСтся Π΄Π°ΠΆΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Ρ‡Ρ‚ΠΎ дСмонстрируСт этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° послС удалСния элСмСнта выбросит ConcurrentModificationException.

НС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ получится Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ for – ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ нумСрация элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ.

ЕдинствСнный способ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅, Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΏΡ€ΠΈ этом ConcurrentModificationException ΠΈΠ»ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ – ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ remove() Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ инстанса ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ ListIterator ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚, Ссли Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° трСбуСтся ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с индСксами.

НСкоторыС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ CopyOnWriteArrayList ΠΈ ConcurrentHashMap Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΡƒΡŽ срСду ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ fail-safe ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.
πŸ‘33❀1
Какова структура Java Collections Framework? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Map Π½Π΅ Collection?

Collection – Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Map – Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΡ‚ΡΡŽΠ΄Π° Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ этих интСрфСйсов. Если ΠΏΡ€ΠΎΡ‰Π΅, Ρ€Π°Π·Π½Ρ‹Π΅ сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² put ΠΈ add.

Collection Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ дСлится Π½Π° Ρ‚Ρ€ΠΈ основных Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ интСрфСйса:
πŸ”˜ List – упорядочСнныС списки с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ содСрТания Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΈ доступа ΠΏΠΎ индСксу (random access);
πŸ”˜ Queue – ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ FIFO-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов с края. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ-наслСдник Deque – двусвязная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ;
πŸ”˜ Set – Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ упорядочСнный Π½Π°Π±ΠΎΡ€ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… (с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния equals) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ;

HashMap ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΊ Π²ΠΈΠ΄Ρƒ Collection Π²Ρ‹Π·Π²Π°Π² Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ keySet(), entrySet() ΠΈΠ»ΠΈ values().
πŸ‘20❀2πŸ”₯1
Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ HashMap?

Один ΠΈΠ· ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½Π΅ΠΉΡˆΠΈΡ… вопросов, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ содСрТит ΠΌΠ½ΠΎΠ³ΠΎ нюансов. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ исходного ΠΊΠΎΠ΄Π° HashMap.

ΠΡŽΠ°Π½ΡΡ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стоит ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ:
πŸ”˜ ΠžΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ: Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ массив table, содСрТащий Π±Π°ΠΊΠ΅Ρ‚Ρ‹ (ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹) – списки элСмСнтов с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ пСрСсчитанными Ρ…ΡΡˆ-суммами;
πŸ”˜ ΠŸΠ΅Ρ€Π΅ΡΡ‡Π΅Ρ‚ Ρ…ΡΡˆ-суммы для умСщСния int индСксов Π² capacity ячСйках table;
πŸ”˜ rehash – ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° table ΠΏΡ€ΠΈ достиТСнии threshold (capacity*loadFactor) занятых Π±Π°ΠΊΠ΅Ρ‚ΠΎΠ²;
πŸ”˜ ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ Ρ€Π°Π·Π΄ΡƒΠ²ΡˆΠΈΠΉΡΡ table;
πŸ”˜ Π”Π²Π° способа Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² HashMap ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° – открытая адрСсация;
πŸ”˜ Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ использования: пСрСсинхронизированная Hashtable ΠΈ умная ConcurrentHashMap;
πŸ”˜ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Java 8: ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ списка Π² Π±Π°ΠΊΠ΅Ρ‚Π΅ Π² Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΏΡ€ΠΈ достиТСнии 8 элСмСнтов – ΠΏΡ€ΠΈ большом количСствС ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доступа растСт с O(n) Π΄ΠΎ O(log(n));
πŸ”˜ Π―Π²Π½ΠΎΠ΅ использованиС Π±Π°ΠΊΠ΅Ρ‚Π° 0 для ΠΊΠ»ΡŽΡ‡Π° null;
πŸ”˜ Бвязь с HashSet – HashMap, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΡŽΡ‡ΠΈ;
πŸ”˜ НСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ порядка элСмСнтов;

ΠžΠ±ΡΡƒΠΆΠ΄Π°Ρ этот вопрос Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ Π²Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅Ρ‚Π΅ особСнности ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² equals/hashCode. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ придСтся ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ± Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ… ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – TreeMap, LinkedHashMap.
πŸ‘21
Как ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Set/Map?

Для Map ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΊΠ»ΡŽΡ‡ΠΈ/значСния ΠΊ Π²ΠΈΠ΄Ρƒ Collection, ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ Π² Π½ΠΎΠ²Ρ‹ΠΉ List ΠΈ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Collections.sort. Π’ΠΎ ΠΆΠ΅ дСлаСтся с Set. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ нСэффСктивный, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ копирования содСрТимого.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ способ – Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΡƒΠΆΠ΅ отсортированными. Для Ρ‚Π°ΠΊΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ созданы интСрфСйсы-наслСдники SortedSet ΠΈ SortedMap.

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ SortedSet Π΄Π°ΡŽΡ‚ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ порядок мноТСства. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ упорядочСны ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π»ΠΈΠ±ΠΎ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΉ (элСмСнты Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Comparable), Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ опрСдСляСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π² конструктор Comparator.
Π­Ρ‚ΠΎΡ‚ интСрфСйс добавляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ получСния подмноТСства ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта (tailSet), Π΄ΠΎ элСмСнта (headSet), ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя (subSet). ΠŸΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ.

SortedSet Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ интСрфСйсом NavigableSet для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ порядку, получСния блиТайшСго снизу (floor), свСрху (ceiling), большСго (higher) ΠΈ мСньшСго (lower) Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ элСмСнта.

ВсС Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ элСмСнтам SortedMap/NavigableMap ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ рСализациями ΡΠ²Π»ΡΡŽΡ‚ΡΡ TreeSet ΠΈ TreeMap. Π’Π½ΡƒΡ‚Ρ€ΠΈ это ΡΠ°ΠΌΠΎΠ±Π°Π»Π°Π½ΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ красно-Ρ‡Ρ‘Ρ€Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ. Π˜Ρ… структура ΠΈ способ балансировки – вопрос достойный ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поста. Другая Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Π°Ρ рСализация ΠΈΠ· java.util.concurrent – ConcurrentSkipListMap.
πŸ‘22πŸ”₯1
Какой Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
πŸ‘15
Какой Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π°?
Anonymous Quiz
53%
I'm child
19%
I'm parent
2%
I'm child I'm parent
6%
I'm parent I'm child
3%
Ошибка выполнСния
16%
Ошибка компиляции
πŸ‘17⚑1❀1
Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ immutable-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ?

Π’ Collections Framework имССтся Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Collections.unmodifiable*() для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π΅Ρ€Π½Π΅Ρ‚ read-only ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ Π½Π°Π΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ с Collections.synchronized*(), Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ копия, Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ коллСкция.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ способ – ΠΌΠ΅Ρ‚ΠΎΠ΄ Collections.empty*(). Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт ΠΊΠ°ΠΊ ΠΈ Π² случаС unmodifiable ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ UnsupportedOperationException.
πŸ‘19
Какими коллСкциями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС?

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π² ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π·Π²Π°Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅Π΅ Ρ‚ΠΈΠΏΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Collections.synchronized*(). Π‘Π°ΠΌΡ‹ΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΈ самый ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ способ, создаСт ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ с синхронизациСй всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ synchronized.

Если Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ состоит Π² основном ΠΈΠ· чтСния, Π»ΡƒΡ‡ΡˆΠ°Ρ Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° – CopyOnWriteArrayList, ΠΈ содСрТащий Π΅Π³ΠΎ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ CopyOnWriteArraySet. ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ достигаСтся ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ массива ΠΏΡ€ΠΈ любой ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ массив остаСтся immutable. Program order достигаСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ volatile Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ массивС.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – использованиС Concurrent-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ:
πŸ”˜ ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ConcurrentSkipListMap, ConcurrentHashMap ΠΈ ConcurrentSkipListSet (Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² основС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ)
πŸ”˜ ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ConcurrentLinkedQueue ΠΈ ConcurrentLinkedDeque
πŸ”˜ Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ
πŸ‘19πŸ”₯5
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘19
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
22%
True
73%
False
2%
Ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (RuntimeException)
3%
Ошибка компиляции
πŸ‘22
Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ HashMap сразу с элСмСнтами?

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с созданиСм Map Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ инициализация Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ varargs здСсь Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ, многословный, Π½ΠΎ простой способ – Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнты сразу послС создания. Для ΠΌΠ°ΠΏΡ‹-поля класса это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² конструкторС ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Map<String, String> map = new HashMap<>();
{
map.put("one", "first");
map.put("two", "second");
}

Идиома double brace initialization. ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π°Ρ запись, которая Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ компилятором ΠΊΠ°ΠΊ созданиС Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ класса-наслСдника ΠΎΡ‚ HashMap, с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ элСмСнтов Π² Π±Π»ΠΎΠΊΠ΅ статичСской ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходам, Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ рСкомСндуСтся.

new HashMap<String, String>() {{
put("one", "first");
put("two", "second");
}};

Для ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… случаСв, пустой ΠΈ одноэлСмСнтной нСизмСняСмых ΠΌΠ°ΠΏ, Π² классС Collections Π΅ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ emptyMap() ΠΈ singletonMap(key, value).

Π£Π΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ HashMap ΠΈΠ· стрима. ΠšΠΎΠ»Π»Π΅ΠΊΡ‚ΠΎΡ€ Collectors.toMap(keyMapper, valueMapper) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ°ΠΏΠΏΠ΅Ρ€ΠΎΠ² ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния.

Π’ Java 9 Π½Π°ΠΊΠΎΠ½Π΅Ρ† появились Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Map.of(), ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ для Ρ€Π°Π·Π½ΠΎΠ³ΠΎ количСства ΠΏΠ°Ρ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈ Map.ofEntries() с varargs-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ.

Π”ΠΎ Java 9 ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… популярных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ImmutableMap.of Π² Guava ΠΈ MapUtils.putAll() Π² Apache Commons.
πŸ‘22πŸ”₯1
Π§Ρ‚ΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘9
Π§Ρ‚ΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
Anonymous Quiz
31%
Object 3 String 3
6%
String 3 String 3
54%
Object 5 String 5
9%
String 5 String 5
πŸ‘20
МоТно Π»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ null Π² стандартных коллСкциях?

ВсС интСрфСйсы Collections Framework ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ своим рСализациям ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΈ null-значСния. Если рСализация Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ null, ΠΎΠ½Π° выбрасываСт NullPointerException ΠΈΠ»ΠΈ ClassCastException.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ списков (LinkedList, ArrayList) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ null Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ (Queue ΠΈ Deque) Π½Π΅ хранят null – возвращая ΠΈΠ· Ρ‡ΠΈΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° null ΠΎΠ½ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎ пустотС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

Unmodifiable Maps Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ null-ΠΎΠ² совсСм. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ измСняСмыС ΠΌΠ°ΠΏΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽΡ‚ трудности со значСниями null. А Π²ΠΎΡ‚ с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π΄Π΅Π»ΠΎ обстоит интСрСснСС.

HashMap Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ hash-сумму ΠΎΡ‚ null. Но вмСсто этого для Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π°ΠΊΠ΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ 0.

Иногда этот вопрос даСтся ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡Π° с ΠΏΠΎΠ΄Π²ΠΎΡ…ΠΎΠΌ ΠΏΡ€ΠΎ TreeMap. Nullability Π΅Ρ‘ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ зависит ΠΎΡ‚ готовности ΠΊ этому ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π°. ΠΠ°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΉ порядок (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для Comparable ΠΊΠ»ΡŽΡ‡Π΅ΠΉ) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ null. РаньшС Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π» Π±Π°Π³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволял ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ null Π² ΠΊΠΎΡ€Π΅Π½ΡŒ Π΄Π΅Ρ€Π΅Π²Π° Π±Π΅Π· выброса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Set-ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π² основС ΠΈΡ… Map-ΠΎΠ².
πŸ‘25