ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ java
Π Π°Π·Π±ΠΈΡΠ°Π΅ΠΌΡΡ Ρ hashCode() ΠΈ equals()
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Ρ Π΅Ρ-ΠΊΠΎΠ΄?
ΠΡΠ»ΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ, ΡΠΎ Ρ Π΅Ρ-ΠΊΠΎΠ΄ β ΡΡΠΎ ΡΠΈΡΠ»ΠΎ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΡΡΠΎ, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ? ΠΡΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎ, ΡΠΎ ΡΡΠΎ Π±ΠΈΡΠΎΠ²Π°Ρ ΡΡΡΠΎΠΊΠ° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ (Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ).
ΠΡΠΈΠΌΠ΅Ρ β1
ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
ΠΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ Π³Π»Π°ΡΠΈΡ:
ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ.
Π ΠΈΡΠΎΠ³Π΅, Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Java, Ρ Π΅Ρ-ΠΊΠΎΠ΄ β ΡΡΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠΎΠ΄Π²Π΅Π΄ΡΠΌ ΠΈΡΠΎΠ³:
Π‘ΠΏΠ΅ΡΠ²Π°, ΡΡΠΎ-Π±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΡΠ°Π½ΠΈΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌΡΡ Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ. ΠΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΏΠΎΠ»Π΅ΠΉ.
ΠΠΎΠ½ΡΡΠΈΠ΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΠΈ. ΠΠ΅ΡΠΎΠ΄ equals()
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π² java, ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΊΠ»Π°ΡΡ, ΠΏΡΡΠΊΠ°ΠΉ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ βBlackBoxβ.
ΠΡΠΈΠΌΠ΅Ρ β2
ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΡ ΠΈ Ρ Π΅Ρ-ΠΊΠΎΠ΄ ΡΠ΅ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π΅Ρ-ΠΊΠΎΠ΄ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ) ΠΈ Π΅ΡΠ»ΠΈ Ρ Π΄Π²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅, ΡΠΎ ΠΈ Ρ Π΅Ρ-ΠΊΠΎΠ΄Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ (ΡΠΌ. ΠΏΡΠ°Π²ΠΈΠ»ΠΎ 2).
ΠΠ»Π°ΡΡ Object
ΠΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ β == β Π²Π΅ΡΠ½Π΅Ρ true Π»ΠΈΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΠΊΠΎΠ³Π΄Π° ΡΡΡΠ»ΠΊΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ-ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎΠ»Π΅ΠΉ.
ΠΠ°Π³Π»ΡΠ½Π΅ΠΌ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π° hashCode() Π² ΠΊΠ»Π°ΡΡΠ΅ Object :
ΠΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ Ρ ΡΡ-ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ° Object ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Park-Miller RNG Π°Π»Π³ΠΎΡΠΈΡΠΌ. Π ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ°Π±ΠΎΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π». ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π½ΡΠΉ Ρ ΡΡ-ΠΊΠΎΠ΄.
ΠΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: βΠ΅ΡΠ»ΠΈ Ρ Π΄Π²ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅, ΡΠΎ ΠΈ Ρ
Π΅Ρ-ΠΊΠΎΠ΄Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ β. ΠΠΎΡΡΠΎΠΌΡ, ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΏΡΠΈΠ½ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ hashCode() ΠΈ equals() ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ Π±Ρ ΡΡΠΈΡΡΠ²Π°Π»ΠΈΡΡ ΠΏΠΎΠ»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΡΡΠ½ΡΡ Π»ΠΈΠ±ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² IDE. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Eclipse ΡΡΠΎ Source β Generate hashCode() and equals().
Π ΠΈΡΠΎΠ³Π΅, ΠΊΠ»Π°ΡΡ BlackBox ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ°Π΅Ρ Π²ΠΈΠ΄:
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ hashCode() ΠΈ equals() ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
ΠΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΡΡΡΠ½ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Effective Java β Joshua Bloch, chapter 3, item 8,9.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ java
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. ΠΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ. Π― ΡΠ½ΠΈΠΌΠ°Ρ Π²ΠΈΠ΄Π΅ΠΎ ΡΠΎΠ»ΠΈΠΊΠΈ ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡ java developera. ΠΠ°ΠΏΠΎΠΌΠ½Ρ ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Ρ ΡΠ°Π·Π±ΠΈΡΠ°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π² java. Π‘Π΅Π³ΠΎΠ΄Π½ΡΡΠ½ΡΡ ΡΠ΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ HashMap. ΠΠΎΡΠ΅ΠΌΡ Ρ Π²ΡΠ±ΡΠ°Π» ΡΡΡ ΡΠ΅ΠΌΡ? ΠΠ° Π²ΡΠ΅ ΠΏΠΎ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π΅. ΠΠ΅ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΡΠ»ΠΈ Π½Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ΅ Π·Π½Π°Π΅ΡΠ΅ = Π½Π΅ Π³ΠΎΡΠΎΠ²Ρ!
Π§ΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ HashMap ΠΊΠ°ΠΊ ΠΏΡΠΎΠ½ΡΠΌΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΠ·ΠΈΠ½ΠΊΠΈ Π² ΠΊΠΎΡΠΎΡΡΡ
Ρ
ΡΠ°Π½ΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² HashMap ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΅ΡΠ΅ ΠΈ ΠΊΠ»ΡΡ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠΊΠ°ΡΡ. ΠΠ°ΠΊ ΠΏΠΎ ΠΊΠ»ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°? ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ hashCode ΠΊΠ»ΡΡΠ°. ΠΠ΄Π΅ ΠΆΠ΅ Π΅Π³ΠΎ Π²Π·ΡΡΡ? ΠΠ° ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΡΡΠΏΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² java. ΠΡΠ΅ Π·Π½Π°ΡΡ ΡΡΠΎ ΠΊΠ»Π°ΡΡ Object ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ hashCode() ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠ°ΠΌΠΈΠΌ βΠΊΠ»ΡΡΠΎΠΌβ. Π’.ΠΊ. Π²ΡΠ΅ Π² java Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° Object. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΠΎΡΠΊΡΠ΄Π° Ρ ΠΊΠ»ΡΡΠ° Π±Π΅ΡΠ΅ΡΡΡ hashCode!
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π² hashMap, Π±ΡΠ» ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΊΠ»ΡΡ + ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ hash ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠΎ Π² ΠΊΠ°ΠΊΡΡ ΠΊΠΎΡΠ·ΠΈΠ½Ρ ΠΎΡΠ½Π΅ΡΡΠΈ Π½Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΊΠΎΡΠ·ΠΈΠ½ΠΎΠΊ Π² HashMap-Π΅ Π½Π΅Ρ. ΠΠΌΠ΅ΡΡΠΎ ΠΈΡ Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ². ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠ°Π½ΠΈΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ Π² ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΠ°Π½ΡΡΡΡ Π½Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅. ΠΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΈΡΠΎΠΊ.
ΠΠ°ΠΊΠΎΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΡΠ·ΠΈΠ½ Π² HashMap?
ΠΠ°Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΌΠ½Π΅ Π½ΠΈ ΡΠ°Π·Ρ Π½Π΅ Π·Π°Π΄Π°Π²Π°Π»ΠΈ Ρ Π΅Π³ΠΎ Π½Π°ΡΠ΅Π» Π½Π° Ρ
Π°Π±ΡΠ΅. ΠΡΠ²Π΅Ρ 16. ΠΠΎ ΠΊΠ°ΠΊ ΠΈ Ρ ArrayList-ΠΎΠΌ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ? Π‘ΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ.
ΠΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ. ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΡΠ°Π·Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΎΠ΄Π½Ρ ΠΊΠΎΡΠ·ΠΈΠ½ΠΊΡ(ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ). ΠΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΡΠΎΠΌΡ ΡΠ»ΡΠΆΠ°Ρ ΡΠΎ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ hashcode. ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ HashMap hashcode Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ Π΄Π»Ρ Π½Π΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΠ» Π²ΡΡΠ΅, Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ°Ρ . ΠΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ? ΠΠΎΡΠ΅ΠΌΡ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ? ΠΡΠ²Π΅Ρ ΠΏΡΠΎΡΡ. ΠΡΠ΅ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ. ΠΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅? ΠΠ΅ΡΠ²ΠΎΠ΅ ΡΡΠΎ ΠΌΡ Π²ΡΡΡΠ½ΡΠ΅ΠΌ ΡΠΎ ΠΊΠ°ΠΊΠ°Ρ ΠΊΠΎΡΠ·ΠΈΠ½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠ»ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π΅ΡΡΡ Π»ΠΈ Π² Π½Π΅ΠΉ ΡΠΆΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΅ΡΠ»ΠΈ Π½Π΅Ρ ΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ. ΠΡΠ»ΠΈ Π΄Π° ΡΠΎ ΡΡΠΎ ΡΠ»ΡΡΠΈΠ»Π°ΡΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ. Π’ΠΎΠ³Π΄Π° ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΊΠ»ΡΡΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΡΠ΅Ρ ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π½ΡΡΡΠΈ (Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΈΡ ΡΠ°ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ). Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ equals. ΠΡΠ»ΠΈ equals Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true Π·Π½Π°ΡΠΈΡ ΠΊΠ»ΡΡΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π·Π°ΠΌΠ΅Π½Π°, Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΡ ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΡΠ°ΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ΄ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΊΠ»ΡΡΠΎΠΌ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½Π΅Ρ ΡΠΏΠΈΡΠΊΠ°.
ΠΠ°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠΎΡΠ·ΠΈΠ½ Π² HashMap?
Π£ HashMap ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ»Π΅ loadFactory. ΠΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½ΠΎ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π½ΡΠ΅ΡΡΡ 0.75. ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ? ΠΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΡΠ·ΠΈΠ½ Π΄Π°Π΅Ρ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎΠ±Ρ ΡΠΎΡΡΠΎΡΠ»ΠΎΡΡ ΡΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠΎΡΠ·ΠΈΠ½.. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ ΠΌΠ°ΠΏΠΊΠ° Ρ 16-Ρ ΠΊΠΎΡΠ·ΠΈΠ½Π°ΠΌΠΈ, Π° loadFactory ΡΠ°Π²Π½ΡΠ΅ΡΡΡ 0.75, ΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ 16 * 0.75 = 12 ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ°ΠΏΠΊΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π²Π΄Π²ΠΎΠ΅.
ΠΠ°ΠΊΠ°Ρ ΠΎΡΠ΅Π½ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ HashMap? ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π»ΠΈ HashMap ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΎΡΠΊΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°?
ΠΠ½ΡΡΡΠ΅Π½Π½ΡΡ ΡΠ°Π±ΠΎΡΠ° HashMap Π² Java
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΈΠ·Π½ΡΡΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ get ΠΈ put Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ HashMap. ΠΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ. ΠΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ. ΠΠ°ΠΊ Ρ ΡΠ°Π½ΡΡΡΡ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅, HashMap ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΡΠΈΠ² Node ΠΈ Node ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ:
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π₯ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ΄Π΅ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Key ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠ³Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ hashCode() Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π². ΠΠΎΠΉ ΠΊΠ»Π°ΡΡ Key:
ΠΠ΄Π΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ hashCode() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ASCII ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΡΡΡΠΎΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΡΡΠΎΠΊΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅, ΡΠΎ ΠΈ Ρ ΡΡ ΠΊΠΎΠ΄Ρ Π±ΡΠ΄ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ. ΠΠ΅ ΡΡΠΎΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ .
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π½ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ HashCode Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠ»ΡΡ ΡΠΈΠΏΠ° null, Ρ ΡΡ ΠΊΠΎΠ΄ null Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ 0.
ΠΠ΅ΡΠΎΠ΄ hashCode()
ΠΠ΅ΡΠΎΠ΄ equals()
ΠΠ΅ΡΠΎΠ΄ equals ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄Π²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ. ΠΠ΅ΡΠΎΠ΄ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ Π² ΠΊΠ»Π°ΡΡΠ΅ Object. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΅Π³ΠΎ Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅. Π ΠΊΠ»Π°ΡΡΠ΅ HashMap ΠΌΠ΅ΡΠΎΠ΄ equals() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π²Π΅Π½ΡΡΠ²Π° ΠΊΠ»ΡΡΠ΅ΠΉ. Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΊΠ»ΡΡΠΈ ΡΠ°Π²Π½Ρ, ΠΌΠ΅ΡΠΎΠ΄ equals() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, ΠΈΠ½Π°ΡΠ΅ false.
ΠΠΎΡΠ·ΠΈΠ½Ρ (Buckets)
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² HashMap
Π₯ΡΡ ΠΊΠΎΠ΄ ΠΊΠ»ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°. Π‘Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Ρ ΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ outOfMemoryException. ΠΠΎΡΠΎΠΌΡ ΠΌΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠΎ ΡΡΡΠΈ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ:
Π³Π΄Π΅ n ΡΠ°Π²Π½Π° ΡΠΈΡΠ»Ρ bucket ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ n, ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π½ΠΎΠ΅ 16.
HashMap:
ΠΡΡΠΈΡΠ»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° <"vishal">. ΠΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ, ΠΊΠ°ΠΊ 118.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ node.
ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 6, Π΅ΡΠ»ΠΈ ΠΌΠ΅ΡΡΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ.
Π’Π΅ΠΏΠ΅ΡΡ HashMap Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ΠΡΡΠΈΡΠ»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° <"sachin">. ΠΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ, ΠΊΠ°ΠΊ 115.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ node.
ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 3, Π΅ΡΠ»ΠΈ ΠΌΠ΅ΡΡΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ.
Π’Π΅ΠΏΠ΅ΡΡ HashMap Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ΠΡΡΠΈΡΠ»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° <"vaibhav">. ΠΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ, ΠΊΠ°ΠΊ 118.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ node.
ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 6, Π΅ΡΠ»ΠΈ ΠΌΠ΅ΡΡΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 6 ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠ΅ΠΉ.
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² hashCode() ΠΈ equals(), ΡΡΠΎ ΠΎΠ±Π° ΠΊΠ»ΡΡΠ° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ.
ΠΡΠ»ΠΈ ΠΊΠ»ΡΡΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ, Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΠΌ.
ΠΠ½Π°ΡΠ΅ ΡΠ²ΡΠ·Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΈ ΡΡΠ°ΡΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ «ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ», ΡΠΊΠ°Π·Π°Π² ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΎΠ±Π° ΠΏΠΎΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 6.
Π’Π΅ΠΏΠ΅ΡΡ HashMap Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
[ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎΡ Π°Π²ΡΠΎΡΠ° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°] ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π·ΡΡΠΎ ΠΈΠ· ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΈ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΡΠΈΠ±ΠΊΡ. Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ vishal Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 6 Π½Π΅ ΡΠ°Π²Π½Π° null, Π² Π½Π΅ΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ vaibhav.
ΠΡΡΠΈΡΠ»ΠΈΡΡ Ρ ΡΡ ΠΊΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ° <βsachinβ>. ΠΠ½ Π±ΡΠ» ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½, ΠΊΠ°ΠΊ 115.
Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ 30.
ΠΡΡΠΈΡΠ»ΠΈΡΡ Ρ ΡΡ ΠΊΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ° <"vaibhav">. ΠΠ½ Π±ΡΠ» ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½, ΠΊΠ°ΠΊ 118.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ node Π½Π΅ ΡΠ°Π²Π΅Π½ null.
ΠΡΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ node ΡΠ°Π²Π΅Π½ null, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ null.
ΠΡΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ node Π½Π΅ ΡΠ°Π²Π΅Π½ null, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ ΡΠ°Π³Π° Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ node Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ null.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Java 8
ΠΠ»Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Java 8 ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠ³Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΡΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ HashMap Π² Π½Π°ΡΠ°Π»Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠ»Π»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Ρ ΡΡΠ΅ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠ³Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π΄Π΅ΡΠ΅Π²ΡΡΠΌ. Π§ΡΠΎ ΡΠ»ΡΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² Ρ ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ O(n) Π΄ΠΎ O(log n).
Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΠΎΠ± ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. ΠΠ° ΡΠ²ΡΠ·ΠΈ ΠΠ»Π°Π΄ΠΈΡΠ»Π°Π² Π ΠΎΠ΄ΠΈΠ½. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ ΡΠ²Π»ΡΡΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ ΠΊΡΡΡΠ° Β«ΠΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡ Π²ΡΡΠΎΠΊΠΈΡ Π½Π°Π³ΡΡΠ·ΠΎΠΊΒ» Π² OTUS, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Ρ Π½Π° ΠΊΡΡΡΠ°Ρ , ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΠ.
ΠΠΎΠΌΠΈΠΌΠΎ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π°Π²ΡΠΎΡΡΠΊΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π΄Π»Ρ Π±Π»ΠΎΠ³Π° OTUS Π½Π° Ρ Π°Π±ΡΠ΅ ΠΈ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΡΡ ΡΡΠ°ΡΡΡ Ρ ΠΎΡΡ ΠΏΠΎΡΠ²ΡΡΠΈΡΡ Π·Π°ΠΏΡΡΠΊΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΊΡΡΡΠ° Β«ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²Β».
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠ°Π²Π°ΠΉΡΠ΅ Π·Π°Π΄Π°Π΄ΠΈΠΌΡΡ ΡΠ΅Π»ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ:
ΠΠ°ΡΡΠΈΠ²
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ²Π΅ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ ΡΡΠ΅ΠΉΠΊΡ ΠΏΡΡΡΠΎΠΉ, Π΅ΡΠ»ΠΈ Π² Π½Π΅ΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ null.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΡ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ, Π²Π΅Π΄Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅. ΠΡΠΈΠΌΠΏΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ Π·Π° O(n), Π³Π΄Π΅ n β ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅
ΠΡΠ»ΠΈ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π°Π±Ρ ΠΊΡΠ΄Π°, ΡΠΎ Π²Π½Π°ΡΠ°Π»Π΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΉΡΠΈ ΠΏΡΡΡΡΡ ΡΡΠ΅ΠΉΠΊΡ, Π° Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² Π½Π΅Π΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΠΎΠΏΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΡ O(n).
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅
Π§ΡΠΎΠ±Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π½Π°ΠΉΡΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Π² Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ ΡΡΠ΅ΠΉΠΊΡ Π·Π°ΠΏΠΈΡΠ°ΡΡ null. ΠΠΏΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π½Π°Ρ ΠΊ O(n).
ΠΡΠΎΡΡΠ΅ΠΉΡΠ΅Π΅ Ρ Π΅Ρ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΈΡΠΊΠ°Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ Π½ΡΠΆΠ½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎΡΡΠΈΡ Π½Π°ΠΌ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΡ! ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π·Π° O(1), ΡΠΎ ΠΈΡΡ ΠΎΠ΄Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° Π±ΡΠ»Π° Π±Ρ ΡΠ΅ΡΠ΅Π½Π°.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ: Π±ΡΠ΄Π΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ½ΡΠΈΠΈ β Ρ Π΅Ρ-ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠ°Π²ΡΡΠ΅ΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΡΡΠ΅ΠΉΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° (ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π·ΡΠ² ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°). ΠΡΠ»ΠΈ Ρ Π΅Ρ-ΡΡΠ½ΠΊΡΠΈΡ Π½Π°ΠΏΠΈΡΠ°Π½Π° ΡΠ°ΠΊ, ΡΡΠΎ ΠΎΠ½Π° ΡΡΠΈΡΠ°Π΅ΡΡΡ Π·Π° O(1) (Π° ΠΎΠ½Π° ΡΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Π°), ΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ°ΠΌΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ Π΅Ρ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°. Π―ΡΠ΅ΠΉΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Ρ Π΅Ρ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΌΠΎΠΆΠ΅Ρ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ bucket‘ΠΎΠΌ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ Π΅Ρ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°
ΠΠ°ΠΊ Π±Ρ Π½ΠΈ Π±ΡΠ»Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° Ρ Π΅Ρ-ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΈΡΠ»ΠΎ ΡΡΠ΅Π΅ΠΊ ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ΅Π³Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Ρ ΡΠ°Π½ΠΈΡΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅ Π΄Π°Π½Π½ΡΡ , Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ. ΠΠ΅Π΄Ρ ΠΌΡ Π±Ρ Π½Π΅ ΡΡΠ°Π»ΠΈ Π·Π°ΠΌΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π΅ΡΠ»ΠΈ Π±Ρ Π±ΡΠ»Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π΄Π΅ΡΡΡΠΈ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π²Π΅ΡΠ½ΠΎ? Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π» ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΡΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡΠΌ. ΠΠΎΠ΄ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠ΅ΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ°Π·Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΡ ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΠΌ Π² ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΡΠ΅ΠΉΠΊΡ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΠ»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½ΠΎ 2 ΠΌΠ΅ΡΠΎΠ΄Π°: ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΡΠΊΡΡΡΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ. Π ΡΡΠ΅ΠΉΠΊΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Ρ ΡΠ°Π½ΠΈΡΡ Π½Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π° ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΡΠΎΠΌΡ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠΏΠΈΡΠΊΠ° (Π° Π½Π°ΠΌ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π² ΠΊΠ°ΠΊΡΡ ΡΠ°ΡΡΡ ΡΠΏΠΈΡΠΊΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ) ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΠΎΠΉ Π(1), ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΡΡΠΈΠΌ ΠΎΠ±ΡΡΡ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΡ, ΠΈ ΠΎΠ½Π° ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠ°Π²Π½ΠΎΠΉ Π(1).
Π£ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: Π΅ΡΠ»ΠΈ ΡΠΏΠΈΡΠΊΠΈ Π±ΡΠ΄ΡΡ ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΠΎ Π²ΡΡΠ°ΡΡΠ°ΡΡ (Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΡΠ°ΠΉΠ½Π΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Ρ Π΅Ρ-ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°), ΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΡ O(m), Π³Π΄Π΅ m β ΡΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½. ΠΠ»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΡΡΠ΅ΠΉ Π²Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π²Π΅Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 1.5). ΠΡΠ»ΠΈ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π΄ΠΎΠ»Ρ ΡΠΈΡΠ»Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² 2 ΡΠ°Π·Π°), ΠΈ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅.
ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² Java, Π° ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ HashSet.
ΠΠ΅ΡΠΎΠ΄ ΠΎΡΠΊΡΡΡΠΎΠΉ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π² ΡΡΠ΅ΠΉΠΊΠ°Ρ Ρ ΡΠ°Π½ΡΡΡΡ ΡΠ°ΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π° Π² ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ±, ΡΠΎ Π΅ΡΡΡ ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΏΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ ΡΡΠ΅ΠΉΠΊΠΈ Π² Π½Π°Π΄Π΅ΠΆΠ΄Π΅ Π½Π°ΠΉΡΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ (Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ / ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ±, Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅), ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΈΠ»ΠΈ Π²ΡΠΎΡΠΈΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ²).
ΠΡ Ρ Π΅Ρ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΊ Ρ Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΠ΅ (HashMap)
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°ΠΊ ΠΆΠ΅ Π±ΡΡΡΡΠΎ, ΠΊΠ°ΠΊ ΠΈ Ρ Π΅Ρ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ (ΡΠΎ Π΅ΡΡΡ Π·Π° O(1)), Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ, ΡΠ΄Π°Π»ΡΡΡ, ΠΈΡΠΊΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π½ΠΎ ΡΠΆΠ΅ ΠΏΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΊΠ»ΡΡΡ.
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎ Ρ Ρ Π΅Ρ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, Π½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π±ΡΠ΄Π΅ΠΌ Π½Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π° ΠΏΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΡΠ°Π²ΠΊΠ° (put(Key key, Value value)) Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΠΊ: ΠΌΡ ΠΏΠΎΡΡΠΈΡΠ°Π΅ΠΌ ΡΡΠ΅ΠΉΠΊΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° Key, ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ bucket’Π°. ΠΡΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ Π² bucket’Π΅, ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ ΠΊΠ»ΡΡ Ρ ΠΊΠ»ΡΡΠΎΠΌ Π² Ρ ΡΠ°Π½ΠΈΠΌΡΡ ΠΏΠ°ΡΠ°Ρ . ΠΡΠ»ΠΈ Π½Π°ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ»ΡΡ β ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠ΅ΡΠ½ΡΠ΅ΠΌ ΡΡΠ°ΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π½Π΅ Π½Π°ΡΠ»ΠΈ β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠ°ΡΡ.
ΠΠ°ΠΊ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎ ΠΊΠ»ΡΡΡ? ΠΠ° ΠΏΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ΠΌΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ: ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ bucket ΠΏΠΎ ΠΊΠ»ΡΡΡ, ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠΎ ΠΏΠ°ΡΠ°ΠΌ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΡΠ΅, ΠΊΠ»ΡΡ Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π²Π΅Π½ ΠΊΠ»ΡΡΡ Π² Π·Π°ΠΏΡΠΎΡΠ΅, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠ°Ρ ΠΏΠ°ΡΠ° Π΅ΡΡΡ, ΠΈ null Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΠ°Π½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Ρ Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ.
Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ Π½Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ
Q: ΠΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Ρ HashSet ΠΈ HashMap? ΠΠ°ΠΊ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΠΈ Π² Π΄Π°Π½Π½ΡΡ
ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΡ
? ΠΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ equals() ΠΈ hashCode()?
A: ΠΡΠ²Π΅ΡΡ Π½Π° Π΄Π°Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π²ΡΡΠ΅.
Q: ΠΠ°ΠΊΠΎΠ² ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π½Π° equals() ΠΈ hashCode()? Π§Π΅ΠΌ ΠΎΠ½ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½?
A: ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°Π²Π½Ρ, ΡΠΎ Ρ Π½ΠΈΡ
Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π²Π½Ρ hashCode. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, hashCode Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΠΎ ΠΏΠΎΠ΄ΠΌΠΎΠΆΠ½ΠΎΡΡΠ²Ρ ΠΏΠΎΠ»Π΅ΠΉ, ΡΡΠ°Π²ΡΡΠ²ΡΡΡΠΈΡ
Π² equals. ΠΠ°ΡΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ Π²Π΅ΡΡΠΌΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠ°ΠΌ. ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°Π²Π½Ρ, Π½ΠΎ hashCode Ρ Π½ΠΈΡ
ΡΠ°Π·Π½ΡΠΉ, ΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ Π΄ΠΎΡΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΊΠ»ΡΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Π² HashSet ΠΈΠ»ΠΈ Π² HashMap.
ΠΡΠ²ΠΎΠ΄
ΠΠ° ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡΡ ΠΎΡΠ΅Π½Ρ Π»ΡΠ±ΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠ΅ΠΉΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΡΠΈΠΌΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ ΠΈΠ· ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π±Π΅Π· Π²ΡΡΠΊΠΎΠΉ Β«Π·ΡΠ±ΡΠ΅ΠΆΠΊΠΈΒ».
ΠΠ° ΡΡΠΎΠΌ Π²ΡΠ΅. ΠΡΠ»ΠΈ Π²Ρ Π΄ΠΎΡΠΈΡΠ°Π»ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°, ΠΏΡΠΈΠ³Π»Π°ΡΠ°Ρ Π½Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΡΡΠΎΠΊ ΠΏΠΎ ΡΠ΅ΠΌΠ΅ Β«Π‘Π΅ΠΊΡΠ΅ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ» Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠΊΠ° ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅Π³Π° β ΠΠ²Π³Π΅Π½ΠΈΠΉ ΠΠΎΠ»ΠΎΡΠ°ΡΠΎΠ² ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΠΊΠ°ΠΊ ΡΠ΅ΡΠΈΡΡ ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π½ΡΡ Π·Π°Π΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ΄Π΅ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π§Π°ΡΡΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΎΡΠ²Π΅ΡΠ½ΠΈΠΊΠ°, Java
ΠΠ΅ΡΠ²ΡΠΌ Π±Π»ΠΎΠΊΠΎΠΌ ΠΈΠ΄ΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΎ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Java.
1. ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π΄ΠΎΡΡΡΠΏΠ° Java (Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΎΡ private Π΄ΠΎ public):
private β ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
protected β ΠΠΎΠ»Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ° protected, Π±ΡΠ΄ΡΡ Π²ΠΈΠ΄Π½Ρ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ², Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ΅, ΡΡΠΎ ΠΈ Π½Π°Ρ ΠΈ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ²-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ² Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
public β ΠΠ΅ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° Π΄ΠΎΡΡΡΠΏ; ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ°ΡΡΡΡ Π΄Π»Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
2. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Β«ΠΊΡΡΠΈΒ» (Π³Π΄Π΅ Ρ ΡΠ°Π½ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ):
ΠΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² ΠΊΡΡΠ΅, Π° ΡΡΡΠ»ΠΊΠΈ Π½Π° Π½ΠΈΡ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΡΠ΅ΠΊΠ΅. ΠΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠΌΠ΅ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ°Π·Π±ΠΈΡΠ° Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΡΠΌΠΈ:
Young Generation β ΠΎΠ±Π»Π°ΡΡΡ Π³Π΄Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π΅Π΄Π°Π²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠΎΠ³Π΄Π° ΠΎΠ½Π° Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π±ΡΡΡΡΠ°Ρ ΡΠ±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ°.
Old (Tenured) Generation β Π·Π΄Π΅ΡΡ Ρ ΡΠ°Π½ΡΡΡΡ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· Young Generation Π΄ΠΎΡΡΠΈΠ³Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠ³Π° βΠ²ΠΎΠ·ΡΠ°ΡΡΠ°β, ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² Old Generation.
Permanent Generation β ΡΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ΅ΡΠ°ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ»Π°ΡΡΠ°Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Java 8 Π΄Π°Π½Π½Π°Ρ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ Π±ΡΠ»Π° ΡΠΏΡΠ°Π·Π΄Π½Π΅Π½Π°.
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅, ΠΊΡΡΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ:ΠΠΎΠ³Π΄Π° ΡΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, Java Π±ΡΠΎΡΠ°Π΅Ρ java.lang.OutOfMemoryError ΠΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ΠΊ ΡΡΠ΅ΠΊΡ. ΠΡΠ° ΠΏΠ°ΠΌΡΡΡ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ΅ΠΊΠ°, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ. ΠΠ»Ρ ΡΠ±ΠΎΡΠ° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ°. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ΅ΠΊΠ°, ΠΊΡΡΠ° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΠΈ Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡ ΠΊΠΎΠ΄.
3. ΠΠ΄Π΅ ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ equals() ΠΈ hashcode():
ΠΠ΅ΡΠΎΠ΄ equals() ΡΠ²Π»ΡΡΡΡΡ Π»ΠΈ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π²Π½ΡΠΌΠΈ. Π‘ΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΠΊΠ»Π°ΡΡΠ° ΡΠ°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ±ΡΠ΅ΠΊΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ null. ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΌΠ΅ΡΠΎΠ΄ equals(), ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ:
Π Π΅ΡΠ»Π΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ: ΠΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ equals() ΡΠ°ΠΌΠΎΠΌΡ ΡΠ΅Π±Π΅.
Π‘ΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΡΡΡ: ΠΡΠ»ΠΈ a.equals(b) == true, ΡΠΎ ΠΈ b.equals(a) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ true.
Π’ΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎΡΡΡ: ΠΡΠ»ΠΈ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ°Π²Π½Ρ ΠΊΠ°ΠΊΠΎΠΌΡ-ΡΠΎ ΡΡΠ΅ΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π·Π½Π°ΡΠΈΡ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π²Π½Ρ Π΄ΡΡΠ³ ΠΈ Π΄ΡΡΠ³Ρ. ΠΡΠ»ΠΈ a.equals(b) == true ΠΈ a.equals(c) == true, Π·Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° b.equals(c) ΡΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ true.
ΠΠΎΡΡΠΎΡΠ½Π½ΠΎΡΡΡ: Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ equals() Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π½Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅ΠΉ. ΠΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π΄Π²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΠΈΡΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° equals() Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ.
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ null Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° a.equals(null) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ false.
ΠΠ΅ΡΠΎΠ΄ hashCode() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° 32-Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΏΠ° int. ΠΡΠ»ΠΈ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ°Π²Π½Ρ (Ρ.Π΅. ΠΌΠ΅ΡΠΎΠ΄ equals() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true), Ρ Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ Ρ ΡΡ-ΠΊΠΎΠ΄. ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎ hashCode() Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ΄ΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ hashCode() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ Ρ ΡΡ-ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Ρ Π΄Π²ΡΡ ΡΠ°Π·Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ΅ΡΠΎΠ΄Ρ equals ΠΈ hashCode Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅.
4. Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ hashcode():
Π’ΠΎΠ³Π΄Π° Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° equals Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±ΡΠ΄ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π²Π½Ρ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° hashCode ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ.
5. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ HashMap:
HashMap β ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Ρ ΡΡ-ΡΠ°Π±Π»ΠΈΡΠ°Ρ , ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Map (ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅). ΠΠ»ΡΡΠΈ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π»ΡΠ±ΡΡ ΡΠΈΠΏΠΎΠ², Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ null. Π‘Π½Π°ΡΠ°Π»Π° ΠΊΠ»ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π½Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ Ρ null. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²Π΅ΡΠ½ΡΠ»Π° true, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ putForNullKey(value). ΠΠ°Π»Π΅Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Ρ ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠ»ΡΡΠ°. ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ hash(hashCode), Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ key.hashCode(). Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° indexFor(hash, tableLength), ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΊΡΠ΄Π° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. Π’Π΅ΠΏΠ΅ΡΡ, Π·Π½Π°Ρ ΠΈΠ½Π΄Π΅ΠΊΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ (ΡΠ΅ΠΏΠΎΡΠΊΡ) ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΊ ΡΡΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅. Π₯ΡΡ ΠΈ ΠΊΠ»ΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Ρ Ρ ΡΡΠ°ΠΌΠΈ ΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΈ, ΠΏΡΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΡΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ°Π³ Π½Π΅ Π²ΡΡΠ²ΠΈΠ» ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ addEntry(hash, key, value, index) Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
6. ΠΠ°ΠΊ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π² HashMap (ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΠ°Ρ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ):
Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ. ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ΅ΠΉΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π° H ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΡΠ²ΡΠ·Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ (ΡΠ΅ΠΏΠΎΡΠΊΡ) ΠΏΠ°Ρ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ Ρ Π΅Ρ-Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ°. ΠΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
7. ΠΠΈΠ΄Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² Java:
Unchecked(Error, RunTimeException); Checked(Exception)
8. ΠΠΈΠ΄Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ Java (ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅ΡΠ΅ Π²ΡΡ, ΡΡΠΎ Π·Π½Π°Π΅ΡΠ΅):
List, Set, Queue, Deque, Map.
9. Π’ΠΈΠΏΡ ΡΡΡΠ»ΠΎΠΊ Java ΠΈ Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠ±ΡΠ²Π°Π½ΠΈΡ ΠΆΡΡΡΠΊΠΎΡΡΠΈ:
Π‘ΠΈΠ»ΡΠ½ΡΠ΅, ΠΎΠ½ΠΈ ΠΆΠ΅ ΠΎΠ±ΡΡΠ½ΡΠ΅, Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π²ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎ ΡΡΠΈ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π½Π΅Π³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ. ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ, ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ OutOfMemoryError.
ΠΡΠ³ΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π΄Π»Ρ ΠΊΡΡΠ΅ΠΉ, ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌΡ ΠΎΠ±ΡΡΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎ Π½ΠΈΠΌ ΠΌΠΎΠ³ΡΡ Π·Π°ΡΠΈΡΡΠΈΡΡΡΡ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ ΡΠΈΠ»ΡΠ½ΡΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ, Π° ΡΠΆΠ΅ Π½Π΅Π³Π΄Π΅, Π»ΡΡΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΠΊΡΡ ΠΈ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ, ΡΠ΅ΠΌ ΡΡΠΎΠ½ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΠΏΡΠΎΡΡ.
Π‘Π»Π°Π±ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ΅ΠΌΡ-Π½ΠΈΠ±ΡΠ΄Ρ Π±Π΅Π· ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΡ ΠΎΡ Π·Π°ΡΠΈΡΡΠΊΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Ρ (Π°-Π»Ρ Map >). ΠΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΡΠΈΡΡΠΊΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π²Π»ΠΈΡΡΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΠΊΠ°ΠΊ, ΡΠ»Π°Π±ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π±ΡΠ΄ΡΡ ΠΎΡΠΈΡΠ΅Π½Ρ ΠΏΡΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ±ΠΎΡΡΠΈΠΊΠ°.
Π€Π°Π½ΡΠΎΠΌΠ½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΆΠ΅ ΠΏΡΠΈΠ·Π½Π°Π½ ΠΌΡΡΠΎΡΠΎΠΌ, ΡΠΈΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π·Π°ΡΠΈΡΡΠΊΠΈ, ΠΎ ΡΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° Cleaner ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
10. Π‘ΠΏΠΎΡΠΎΠ±Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Java:
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ. Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΡΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π² Java ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° synchronized. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΡΠ²ΠΎΠΈΡ ΠΊΠ»Π°ΡΡΠ°Ρ , ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈ. ΠΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ synchronized Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°Ρ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΡΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ»ΠΈ Π½Π΅ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠ³ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠΎΠ²Π½Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°.
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΡΠΎΠ²Π½Ρ ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ Π²Π²ΠΎΠ΄ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π±Π»ΠΎΠΊ Π² Π»ΡΠ±ΠΎΠΌ ΠΈΠ· Π²ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΅ΡΡΡ 100 ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² DemoClass, ΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ demoMethod() Π² Π»ΡΠ±ΠΎΠΌ ΠΈΠ· ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Π±ΡΠ΄ΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
11. Volatile β ΡΡΠΎ ΡΡΠΎ:
ΠΠ°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΊΡΡ. ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ volatile ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· Π½Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠΌΠΈ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΡΠ·Ρ happens-before (ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ-Π΄ΠΎ) Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ Π»ΡΠ±ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ²ΠΈΠ΄ΡΡ ΡΡΠΎ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Java ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ Π² ΡΠ΅Π»ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΊΠ΅ΡΠ°Ρ ΠΈΠ»ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°). Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΠΈΡΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π΅ΡΡ ΡΠ²ΠΎΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠΎ ΡΡΠ°ΡΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° volatile Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅Π΅, ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π²ΠΈΠ΄Π΅ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΡΡΠ°Π·Ρ ΠΆΠ΅. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π΄ΡΠΈΠ΅ Π²Π½ΡΡΡΠΈ sychronized-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ synchronized-Π±Π»ΠΎΠΊΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ Π±Π»ΠΎΠΊΠΎΠ² Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ Π²ΡΠΎΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° java.util.concurrent.locks.Lock ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π±ΡΠ΄ΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π²ΠΈΠ΄Π½Ρ Π»ΡΠ±ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΏΠΎΡΠ»Π΅ Π²Π·ΡΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°Π΄ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ°ΠΌΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ volatile.
12. StringBuilder vs String:
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡΠΈ, Ρ ΡΡΠΊΠΎΠ΄ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° String ΠΊΡΡΠΈΡΡΠ΅ΡΡΡ. ΠΠ³ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ. ΠΡΠΎ Π΄Π°Π΅Ρ Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° Π΄Π»Ρ HashMap.
StringBuilder β ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π½ΠΈΠΌ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΌΡΡΠΎΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠ°ΠΊ ΡΠΎ String. ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ Π½Π°Π΄ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ, Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ StringBuilder.
13. ΠΠ°Π·ΠΎΠ²ΠΈΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ HashMap (Hashtable, Π½ΠΎ ΡΡΡΠ°ΡΠ΅Π»Π°):
SynchronizedMap ΠΈ ConcurrentHashMap.
ΠΠ΅ΡΠΎΠ΄Ρ SynchronizedMap ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ConcurrentHashMap Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ Β«ΡΠ΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊΒ», ΠΊΠΎΠ³Π΄Π° Π²ΠΌΠ΅ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π±Π»ΠΎΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ»ΡΡΡΠ°Π΅ΡΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
14. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ArrayList Π² Java (Π½Π° Π±Π°Π·Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°):
ΠΠ»Π°ΡΡ ArrayList ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ List ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ArrayList ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π»ΡΠ±ΡΡ ΡΠΈΠΏΠΎΠ² Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ null. ΠΠ½ΡΡΡΠΈ Ρ Π½Π΅Π³ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ°ΡΡΠΈΠ², Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈ Ρ ΡΠ°Π½ΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. Π£ArrayListΚΌa Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π½ΠΈΠΌ: ΠΠΎΠ³Π΄Π° ΡΡΠΎΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ArrayList ΡΠΎΠ·Π΄Π°Π΅Ρ Π²Π½ΡΡΡΠΈ ΡΠ΅Π±Ρ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ². ΠΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ = (ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° * 1,5) +1. ΠΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ ΠΈΠ· ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² Π½ΠΎΠ²ΡΠΉ Π‘ΡΠ°ΡΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ°.
15. ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ final Π² Java β Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈ ΡΡΠΎ Π΄Π°ΡΡ:
ΠΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²) ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠ° ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠ², Ρ.Π΅. Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° final ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°Ρ . ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. ΠΠ»Ρ ΡΡΡΠ»ΠΎΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π½Π΅Π»ΡΠ·Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. Π‘ΡΡΠ»ΠΊΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅Π»ΡΠ·Ρ, Π½ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΠΎΠΏΡΠΎΡ ΠΈΠ· ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΎΠΏΡΡΠ°:
ΠΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠΌΠ΅ΡΡΡΡ Ρ ΠΊΠ»Π°ΡΡΠ° Object?
public String toString() β ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
public native int hashCode() ΠΈ public boolean equals(Object obj) β ΠΠ°ΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
public final native Class getClass() β ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ.
public final native void notify(),
public final native void notifyAll(),
public final native void wait(long timeout),
public final void wait(long timeout, intnanos),
public final void wait() β ΠΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π½ΠΈΡΠ΅ΠΉ. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π½ΠΈΡΠ΅ΠΉ.
protected void finalize() β ΠΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Β«ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡΒ» ΡΠΎΠ΄Π½ΡΠ΅ Π½Π΅-Java ΡΠ΅ΡΡΡΡΡ: Π·Π°ΠΊΡΡΡΡ ΡΠ°ΠΉΠ»Ρ, ΠΏΠΎΡΠΎΠΊΠΈ ΠΈ Ρ.Π΄.
protected native Object clone() β ΠΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ: ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΡΠ±Π»ΠΈΠΊΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΡΠ΅ ΠΎΡΠ²Π΅ΡΡ ΡΠΎΠ±ΡΠ°Π½Ρ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²: