ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ содСрТимому
ΠœΠ°ΠΊΡΠΈΠΌΠ΅Ρ‚Π΅Ρ€

🧠 Как Π² Java ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ equals() ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² HashMap

🧠 Как Π² Java ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ equals() ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² HashMap БСгодня ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ Π±Π°Π³ Π² equals()/hashCode() ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с HashMap. Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ Entity: public class User { private String id; private String name; // equals/hashCode Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ id @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof User)) return false; User user = (User) o; return Objects.equals(id, user.id); } @Override public int hashCode() { return Objects.hash(id); } } Π’Ρ€ΠΎΠ΄Π΅ Π½ΠΎΡ€ΠΌ. Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΡŽΠ·Π΅Ρ€Π° Π² HashMap, Π° ΠΏΠΎΡ‚ΠΎΠΌ... ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π΅Π³ΠΎ id: User user = new User(); user.setId("1"); user.setName("Alice"); Map<User, String> map = new HashMap<>(); map.put(user, "value"); user.setId("2"); // ⚠️ ΠΊΠ»ΡŽΡ‡ стал "Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ" System.out.println(map.get(user)); // null 😱 πŸ“Œ ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ происходит? HashMap ΠΈΡ‰Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ ΠΏΠΎ hashCode() β†’ ΠΈΡ‰Π΅Ρ‚ Π±Π°ΠΊΠ΅Ρ‚ β†’ сравниваСт Ρ‡Π΅Ρ€Π΅Π· equals(). А hashCode() ΡƒΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ "тСряСтся". πŸ’‘ Π‘ΠΎΠ²Π΅Ρ‚: Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ Π² ΠΌΠ°ΠΏΠ΅ ΠΈΠ»ΠΈ добавляСтС Π΅Π³ΠΎ Π² Set, Π½Π΅ измСняйтС Π΅Π³ΠΎ поля, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² equals()/hashCode()! πŸ“Œ А ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ? - Π”Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΈΠ΅ поля final; - Или ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ нСизмСняСмыС Ρ‚ΠΈΠΏΡ‹ (record); - Или Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ΠΈ вовсС. Π’ΠΎΡ‚ бСзопасный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с record: public record User(String id, String name) {} πŸ‘‰ @BookJava

550 просмотров

Канал Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠœΠ°ΠΊΡΠΈΠΌΠ΅Ρ‚Π΅Ρ€Π°

1Β 614 подписчиков Β· IT ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°

Π•Ρ‰Ρ‘ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ Β«IT ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈΒ»

Π§ΠΈΡ‚Π°Ρ‚ΡŒ дальшС

Π”Π²Π° Ρ€Π°Π·Π° Π² нСдСлю свСТиС посты этого ΠΊΠ°Π½Π°Π»Π° β€” Π½Π° ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈ Π² Π»ΠΈΡ‡Π½ΡƒΡŽ Π»Π΅Π½Ρ‚Ρƒ. Π‘Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ поиска ΠΊΠ°Π½Π°Π»Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.