Sobes.tech
Junior — Middle

განმარტეთ, რა ნიშნავს გასაღებების შეჯახება HashMap მონაცემთა სტრუქტურაში და როგორ უვლის იგი ამას.

sobes.tech AI

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

HashMap-ში გასაღებების შეჯახება (hash collision) ხდება, როდესაც ორი სხვადასხვა გასაღები ჰეშფუნქციის გამოთვლისას ერთსა და იმავე ინდექსს იძლევა შენახვისთვის მასივში.

როგორ მართავს ამას HashMap:

  • Java-ში HashMap იყენებს ჯაჭვებს (ლინკირებულ სიებს ან ბალანსირებულ ხეებს) იმისთვის, რომ შეინახოს რამდენიმე ელემენტი, რომლებიც ერთსა და იმავე ბაკეტში ხვდება.
  • ახალი ელემენტის დამატებისას, რომლის ჰეშიც ემთხვევა უკვე არსებულს, ახალი ელემენტი ემატება ამ ბაკეტის ჯაჭვში.
  • გასაღების ძიებისას, HashMap გადის ჯაჭვში არსებულ ელემენტებს და შედარებს გასაღებს მეთოდით equals(), რათა იპოვოს სწორი.

Java 8-დან მოყოლებული, თუ ჯაჭვი ძალიან გრძელია, ის გარდაიქმნება ბალანსირებულ ხეად (TreeNode), რაც აუმჯობესებს ძიების სიჩქარეს O(n)-დან O(log n)-მდე.