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 უარყოფით პასუხს აძლევს, გასაღებს ახალი მიიჩნევს და კოლექციაში ემატება.