Π’ΠΈΠΌΠ»ΠΈΠ΄ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java
ΠΠΈΠ±ΡΠΈΠ΄Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π² Π³ΠΎΡΠΎΠ΄Π°Ρ Π Π€, Π‘Π΅ΡΠ±ΠΈΠΈ, ΠΠ°Π·Π°Ρ ΡΡΠ°Π½Π°, ΠΡΠΌΠ΅Π½ΠΈΠΈ, ΠΠ΅Π»Π°ΡΡΡΠΈ.
ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π―Π½Π΄Π΅ΠΊΡΠ° β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ², Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠΎΠΈΡΡΡ runtime ΠΎΠ±Π»Π°ΠΊΠ°, Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠ»Π°ΠΉΠ½-Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠΡΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΠΎΠΉ, ΡΠ΅ΡΡΡΡΠ½ΠΎΠΉ ΠΈ ΡΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ β ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠ΅Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ . ΠΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ Π²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡΡ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊ Π½ΠΈΠΌ Π΄ΠΎΡΡΡΠΏΡ.
ΠΡΠ΅ΠΌ ΠΎΠΏΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ»ΠΈΠ΄Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π±ΡΠ΄Π΅Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π½Π°Π½ΠΈΠΌΠ°ΡΡ Π½ΠΎΠ²ΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΠΈΡ .
ΠΠ°Ρ ΡΡΠ΅ΠΊ: Java 11, Spring Boot, Reactor, HTTP ΠΈ gRPC API, Kotlin, PostgreSQL.
ΠΡ ΠΆΠ΄Π΅ΠΌ, ΡΡΠΎ Π²Ρ:
- ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈ Π½Π° Java Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ΅Ρ Π»Π΅Ρ;
- ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄;
- ΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ; Π½Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π»ΡΠ΄Π΅ΠΉ ΠΈ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²;
- ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅ΡΡΠΈ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΌΠ»Π°Π΄ΡΠΈΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΄Π΅Π»ΠΈΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ ΠΈ ΠΎΠΏΡΡΠΎΠΌ;
- Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΡ;
- ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, *nix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΠΠ‘.
- Π·Π½Π°Π΅ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Java-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ (Spring Boot, jUnit, Netty, Reactor);
Π£ΡΠ»ΠΎΠ²ΠΈΡ:
- ΡΠΈΠ»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈ;
- Π·Π°ΡΠΏΠ»Π°ΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΠ½ΠΊΠ° ΠΈ Π²ΡΡΠ΅;
- ΠΏΡΠ΅ΠΌΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΡΠ΅ ΠΏΠΎΠ»Π³ΠΎΠ΄Π° Π΄Π»Ρ Π²ΡΠ΅Ρ , ΠΊΡΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ» ΡΠ΅Π²ΡΡ;
- ΡΠ°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΠΠ‘: ΠΎΠΏΠ»Π°ΡΠ° 80% ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΠΠΠ‘ Π΄Π»Ρ ΡΡΠΏΡΡΠ³ΠΎΠ² ΠΈ Π΄Π΅ΡΠ΅ΠΉ;
- Π³ΠΈΠ±ΠΊΠΈΠΉ Π³ΡΠ°ΡΠΈΠΊ ΡΠ°Π±ΠΎΡΡ.
ΠΡΠΊΠ»ΠΈΠΊΠ½ΡΡΡΡΡ: https://goo.su/hlTfAB ΠΈΠ»ΠΈ Π² Π’Π: @Karm_Anna
ΠΠΈΠ±ΡΠΈΠ΄Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π² Π³ΠΎΡΠΎΠ΄Π°Ρ Π Π€, Π‘Π΅ΡΠ±ΠΈΠΈ, ΠΠ°Π·Π°Ρ ΡΡΠ°Π½Π°, ΠΡΠΌΠ΅Π½ΠΈΠΈ, ΠΠ΅Π»Π°ΡΡΡΠΈ.
ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π―Π½Π΄Π΅ΠΊΡΠ° β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ², Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠΎΠΈΡΡΡ runtime ΠΎΠ±Π»Π°ΠΊΠ°, Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠ»Π°ΠΉΠ½-Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠΡΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΠΎΠΉ, ΡΠ΅ΡΡΡΡΠ½ΠΎΠΉ ΠΈ ΡΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ β ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠ΅Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ . ΠΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ Π²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡΡ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊ Π½ΠΈΠΌ Π΄ΠΎΡΡΡΠΏΡ.
ΠΡΠ΅ΠΌ ΠΎΠΏΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ»ΠΈΠ΄Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π±ΡΠ΄Π΅Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π½Π°Π½ΠΈΠΌΠ°ΡΡ Π½ΠΎΠ²ΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΠΈΡ .
ΠΠ°Ρ ΡΡΠ΅ΠΊ: Java 11, Spring Boot, Reactor, HTTP ΠΈ gRPC API, Kotlin, PostgreSQL.
ΠΡ ΠΆΠ΄Π΅ΠΌ, ΡΡΠΎ Π²Ρ:
- ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈ Π½Π° Java Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ΅Ρ Π»Π΅Ρ;
- ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄;
- ΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ; Π½Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π»ΡΠ΄Π΅ΠΉ ΠΈ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²;
- ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅ΡΡΠΈ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΌΠ»Π°Π΄ΡΠΈΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΄Π΅Π»ΠΈΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ ΠΈ ΠΎΠΏΡΡΠΎΠΌ;
- Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΡ;
- ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, *nix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΠΠ‘.
- Π·Π½Π°Π΅ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Java-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ (Spring Boot, jUnit, Netty, Reactor);
Π£ΡΠ»ΠΎΠ²ΠΈΡ:
- ΡΠΈΠ»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈ;
- Π·Π°ΡΠΏΠ»Π°ΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΠ½ΠΊΠ° ΠΈ Π²ΡΡΠ΅;
- ΠΏΡΠ΅ΠΌΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΡΠ΅ ΠΏΠΎΠ»Π³ΠΎΠ΄Π° Π΄Π»Ρ Π²ΡΠ΅Ρ , ΠΊΡΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ» ΡΠ΅Π²ΡΡ;
- ΡΠ°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΠΠ‘: ΠΎΠΏΠ»Π°ΡΠ° 80% ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΠΠΠ‘ Π΄Π»Ρ ΡΡΠΏΡΡΠ³ΠΎΠ² ΠΈ Π΄Π΅ΡΠ΅ΠΉ;
- Π³ΠΈΠ±ΠΊΠΈΠΉ Π³ΡΠ°ΡΠΈΠΊ ΡΠ°Π±ΠΎΡΡ.
ΠΡΠΊΠ»ΠΈΠΊΠ½ΡΡΡΡΡ: https://goo.su/hlTfAB ΠΈΠ»ΠΈ Π² Π’Π: @Karm_Anna
yandex.ru
ΠΠ°ΠΊΠ°Π½ΡΠΈΡ Β«Π ΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java Π±Π°Π·ΠΎΠ²ΡΡ
ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²Β» Π² Π―Π½Π΄Π΅ΠΊΡΠ΅ β ΡΠ°Π±ΠΎΡΠ° Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π―Π½Π΄Π΅ΠΊΡ Π΄Π»Ρ ITβ¦
Π Π°Π±ΠΎΡΠ° Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π―Π½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ° Β«Π ΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java Π±Π°Π·ΠΎΠ²ΡΡ
ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²Β» Ρ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡ Β«Π‘ΡΠ°ΡΡΠΈΠΉΒ» Π΄ΠΎ Β«Π‘ΡΠ°ΡΡΠΈΠΉΒ» β ΠΡΡΠΎΠΊΠ°Ρ Π·Π°ΡΠ°Π±ΠΎΡΠ½Π°Ρ ΠΏΠ»Π°ΡΠ° ΠΈ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π² IT-ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π ΠΎΡΡΠΈΠΈ
π4β€1
ΠΠ°ΠΊΠΈΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ @β Component, @β Service, @β Repository ΠΈ @β Controller?
@Component β ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Spring-Π±ΠΈΠ½Π°. ΠΠ· Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π·Π½Π°Π΅Ρ @ComponentScan), Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π±ΠΈΠ½-Π΄Π΅ΡΠΈΠ½ΠΈΡΠ½Ρ.
ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ β ΡΡΠΎ Π°Π»ΠΈΠ°ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Component. Π‘Π°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΄ΡΠ° Spring Framework ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅.
ΠΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ Β«Stereotype annotationsΒ». ΠΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ β ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΎΠ»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
β’ @β Service β ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ;
β’ @β Repository β Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΡ : Β«ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉΒ» ΠΈΠ· Domain-Driven Design ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ DAO;
β’ @β Controller β ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π΅Π±-Π·Π°ΠΏΡΠΎΡΠΎΠ² (ΠΌΠ΅ΡΠΎΠ΄Ρ @RequestMapping)
Π‘ΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Persistence API ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ ΡΡΠ΅ΡΠ΅ΠΎΡΠΈΠΏΠ° @Repository. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΊΡΠΎΠΌΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
@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, ΠΈ Π΄ΡΡΠ³ΠΈΡ .
ΠΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ: ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , 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.
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΈ. ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΡΠ°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠ°Π±ΠΎΡΡ Π² 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.
Π‘Π°ΠΌΡΠΉ ΠΈΠ·Π±ΠΈΡΡΠΉ Π²ΠΎΠΏΡΠΎΡ. ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π·Π½Π°Π½ΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΠΊΠΈΡΠΊΠΈ ArrayList, ΠΊΠΈΡΠΊΠΈ LinkedList) ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΡΡΠΈΡ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ . Π Π²ΠΎΠΏΡΠΎΡ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Vector β ΠΏΠ΅ΡΠ΅ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ArrayList, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΡΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Collections.synchronizedList().
ArrayList Ρ ΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, LinkedList Π² Π΄Π²ΡΡΠ²ΡΠ·Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅. ΠΠ· ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ΅ΠΊΠ°Π΅Ρ ΡΠ°Π·Π½ΠΈΡΠ° Π² ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ°Π·Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ: ArrayList Π»ΡΡΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΈ ΡΠΎΡΡΠΎΠΌ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ capacity, LinkedList β Π½Π° ΠΊΡΠ°ΡΡ . Π ΡΠ΅Π»ΠΎΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ArrayList Π»ΡΡΡΠ΅.
Π‘ΡΠΎΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΊΡΠ°ΡΡ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Deque: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠΉ Π±ΡΡΠ΅Ρ ArrayDeque.
π34π€£3π₯2
ΠΠ°ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
31%
ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΠ΅ 12
13%
ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΠ΅ 13
20%
ΠΠΎΠ΄ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ
36%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π13β€1
ΠΠ°ΠΊ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ArrayList ΠΏΡΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ?
ΠΠ±ΡΡΠ½ΠΎ ΡΠΎΡΠΌΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π·Π°Π΄Π°ΡΠΈ Π½Π° Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Β«ΡΡΠΎ Π·Π΄Π΅ΡΡ Π½Π΅ ΡΠ°ΠΊΒ», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ, Π° ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ for β ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ΄Π²ΠΈΠ³Π°ΡΡΡΡ.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΏΡΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π΅, Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ² ΠΏΡΠΈ ΡΡΠΎΠΌ ConcurrentModificationException ΠΈΠ»ΠΈ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ β ΡΠ΄Π°Π»ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ remove() ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠ°ΡΠΈΠ°Π½Ρ ListIterator ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΡΠ΅Π»Π΅ ΡΠΈΠΊΠ»Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ CopyOnWriteArrayList ΠΈ ConcurrentHashMap Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΡΡΠ΅Π΄Ρ ΠΈ ΠΈΠΌΠ΅ΡΡ fail-safe ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ.
ΠΠ±ΡΡΠ½ΠΎ ΡΠΎΡΠΌΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π·Π°Π΄Π°ΡΠΈ Π½Π° Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Β«ΡΡΠΎ Π·Π΄Π΅ΡΡ Π½Π΅ ΡΠ°ΠΊΒ», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
for (String item : arrayList)ΠΠΎΠ΄Π²ΠΎΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ArrayList, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ°ΠΊΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΡΠΈΠΊΠ»Π° for, ΡΠ²Π»ΡΠ΅ΡΡΡ fail-fast, ΡΠΎ Π΅ΡΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ. Π ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Π°Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ»ΡΡΠ°Π΅ΡΡΡ Π΄Π°ΠΆΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΡΡΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π²ΡΠ±ΡΠΎΡΠΈΡ ConcurrentModificationException.
if (item.length() > 2)
arrayList.remove(item);
ΠΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ, Π° ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ 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().
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.
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π΅ΠΉΡΠΈΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ², ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΡΠ°Π½ΡΠΎΠ². ΠΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° 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.
ΠΠ»Ρ 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
ΠΠ°ΠΊΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°?
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.
Π 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
π ΠΠΎΠ»ΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ
ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ Π² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΎΠ±ΡΡΠ½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, Π²ΡΠ·Π²Π°Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅Π΅ ΡΠΈΠΏΡ ΠΌΠ΅ΡΠΎΠ΄ Collections.synchronized*(). Π‘Π°ΠΌΡΠΉ ΠΎΠ±ΡΠΈΠΉ ΠΈ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ±, ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±Π΅ΡΡΠΊΡ Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π²ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ synchronized.
ΠΡΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ΅ΠΉ ΡΠΎΡΡΠΎΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΠ· ΡΡΠ΅Π½ΠΈΡ, Π»ΡΡΡΠ°Ρ Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° β CopyOnWriteArrayList, ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π΅Π³ΠΎ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ CopyOnWriteArraySet. ΠΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΎΡΡΠ°Π΅ΡΡΡ immutable. Program order Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ volatile Π½Π° Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅.
Π’ΡΠ΅ΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Concurrent-ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ:
π ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ Ρ ΡΡ-ΡΠ°Π±Π»ΠΈΡΡ ConcurrentSkipListMap, ConcurrentHashMap ΠΈ ConcurrentSkipListSet (Ρ ΡΡ-ΡΠ°Π±Π»ΠΈΡΠ° Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ)
π ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ConcurrentLinkedQueue ΠΈ ConcurrentLinkedDeque
π ΠΠΎΠ»ΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ
π19π₯5
ΠΠ°ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
22%
True
73%
False
2%
ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (RuntimeException)
3%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π22
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ HashMap ΡΡΠ°Π·Ρ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ?
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Map Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ½ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π½Π°Π±ΠΎΡ ΠΏΠ°Ρ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΠΎΡΡΠΎΠΌΡ varargs Π·Π΄Π΅ΡΡ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ.
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ, ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΡΠΉ, Π½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ. ΠΠ»Ρ ΠΌΠ°ΠΏΡ-ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
Π£Π΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ HashMap ΠΈΠ· ΡΡΡΠΈΠΌΠ°. ΠΠΎΠ»Π»Π΅ΠΊΡΠΎΡ Collectors.toMap(keyMapper, valueMapper) Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΠΏΠΏΠ΅ΡΠΎΠ² ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΡΠΎΠΊΠ° Π² ΠΊΠ»ΡΡΠΈ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π Java 9 Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΡΠ°Π±ΡΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Map.of(), ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΈ Map.ofEntries() Ρ varargs-Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ.
ΠΠΎ Java 9 ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π±ΡΠ»ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ImmutableMap.of Π² Guava ΠΈ MapUtils.putAll() Π² Apache Commons.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Map Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ½ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π½Π°Π±ΠΎΡ ΠΏΠ°Ρ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΠΎΡΡΠΎΠΌΡ varargs Π·Π΄Π΅ΡΡ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ.
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ, ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΡΠΉ, Π½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ. ΠΠ»Ρ ΠΌΠ°ΠΏΡ-ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
Map<String, String> map = new HashMap<>();ΠΠ΄ΠΈΠΎΠΌΠ° double brace initialization. ΠΠΎΠΌΠΏΠ°ΠΊΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ° ΠΎΡ HashMap, Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π±Π»ΠΎΠΊΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌ ΡΠ°ΡΡ ΠΎΠ΄Π°ΠΌ, ΡΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ.
{
map.put("one", "first");
map.put("two", "second");
}
new HashMap<String, String>() {{ΠΠ»Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°Π΅Π², ΠΏΡΡΡΠΎΠΉ ΠΈ ΠΎΠ΄Π½ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΠΎΠΉ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΠΌΠ°ΠΏ, Π² ΠΊΠ»Π°ΡΡΠ΅ Collections Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°Π±ΡΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ emptyMap() ΠΈ singletonMap(key, value).
put("one", "first");
put("two", "second");
}};
Π£Π΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ HashMap ΠΈΠ· ΡΡΡΠΈΠΌΠ°. ΠΠΎΠ»Π»Π΅ΠΊΡΠΎΡ Collectors.toMap(keyMapper, valueMapper) Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΠΏΠΏΠ΅ΡΠΎΠ² ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΡΠΎΠΊΠ° Π² ΠΊΠ»ΡΡΠΈ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π Java 9 Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΡΠ°Π±ΡΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Map.of(), ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΈ Map.ofEntries() Ρ varargs-Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ.
ΠΠΎ Java 9 ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π±ΡΠ»ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ImmutableMap.of Π² Guava ΠΈ MapUtils.putAll() Π² Apache Commons.
π22π₯1
Π§ΡΠΎ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄?
Anonymous Quiz
31%
Object 3 String 3
6%
String 3 String 3
54%
Object 5 String 5
9%
String 5 String 5
π20