Co jeśli nie zaimplementuję metody equals()

Odpowiedz Nowy wątek
2019-05-15 18:29
0

Cześć,
Mam pytanie odnośnie hashCode() i equals(). Czy jeśli nie zaimplementuje tych metod w mojej klasie - equals z Object zadziała poprawnie (np przy dodawaniu do Hashmapy czy zwykłym sprawdzaniu ifem).

Pozostało 580 znaków

2019-05-15 18:44
1

Również zadziała poprawnie, tylko że to ty powinieneś zdefiniować na jakich zasadach ma być obiekt porównywany. Bo w tym przypadku equals zwróci true wtedy kiedy porównasz te same referencje.

edytowany 3x, ostatnio: krancki, 2019-05-15 18:46
Pokaż pozostałe 3 komentarze
Źle przeczytałem wątek (myślałem, że haschode nadpisujemy, equals nie). Hashcode nie jest od porównywania referencji, ani nie zwraca on adresu obiektu, jedynie equals porównuje referencje (defaultowy). Co suma sumarum dochodzi do tego, że nie nadpisanie tych 2 metod moze nas narazić na niepoprawne działanie hashmapy czy innnych kolekcji, więc to co napisałeś nie jest w pełni prawdą - must1 2019-05-16 15:39
@must1: co masz na myśli mówiąc niepoprawne ? Nie nadpisanie hashcodu/equals sprawi, że będzie to nieoptymalne, ale wciąż poprawne. - ThisIsHowIRoll 2019-05-16 18:08
@ThisIsHowIRoll: mam to na mysli, ze jak nie nadpiszemy jednej z tych metody, to może się np to stać, ze obiekt o tych samych wartościach będzie w innym buckecie ze względny na inny hash klucza albo jak nie nadpiszemy equals to możemy mieć w tym samym buckecie 2x obiekt o takich samych wartościach, co powinno być nadpisane jako iż nie można mieć 2 takich samych kluczy - must1 2019-05-16 18:59
Co może spowodować min niepoprawne wyszukiwanie elementów - must1 2019-05-16 19:01
Tak jak napisałem, to od twórcy zależy co chcę osiągnąć. - krancki 2019-05-17 10:50

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: CCBot