Sobes.tech
Junior — Middle

რა მოხდება, თუ HashMap-ში ორი გასაღები ერთნაირი hash-კოდით, მაგრამ განსხვავებული მნიშვნელობებით according to equals ჩასვათ?

sobes.tech AI

პასუხი AI-სგან

Java-да HashMap-ში გასაღებები ინახება ბაკეტებში, რომლებიც ჰეშ-კოდის მიხედვით ინდექსირებულია. თუ ორი გასაღები ერთსა და იმავე ჰეშ-კოდს შეიცავს, ისინი ერთ ბაკეტში ხვდებიან, მაგრამ უნიკალურობის განსაზღვრისთვის გამოიყენება მეთოდი equals.

თუ ორი გასაღები ერთსა და იმავე ჰეშ-კოდს შეიცავს, მაგრამ equals-ით არ არის თანხვედრილი, HashMap შეინახავს ორივე გასაღებს როგორც სხვადასხვა ჩანაწერს ერთსა და იმავე ბაკეტში.

მაგალითი:

Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, მაგრამ !key1.equals(key2)

map.put(key1, "value1");
map.put(key2, "value2");

System.out.println(map.size()); // 2

ამიტომ, ერთსა და იმავე ჰეშ-კოდი არ ნიშნავს ერთსა და იმავე გასაღებს. HashMap პირველ რიგში ეძებს ბაკეტში ჰეშით, შემდეგ კი შედარებს გასაღებს equals-ით. თუ equals უარყოფით პასუხს აძლევს, გასაღებს ახალი მიიჩნევს და კოლექციაში ემატება.