Middle+
ჰეში გამოითვალა, ბაკეტი იპოვეს, ახალი მნიშვნელობა შეიყვანეს. რა ხდება, როდესაც ახალი მნიშვნელობა იგივე ჰეშით მოდის (კოლიზია)?
sobes.tech AI
პასუხი AI-სგან
Go-ში, როდესაც მუშაობთ რუკებთან, როდესაც ხდება ჰეშის შეჯახება (სხვადასხვა გასაღებები აქვს ერთსა და იმავე ჰეშს), გამოიყენება chaining მეთოდი (ზვიგზა) ბაკეტის შიგნით.
ალგორითმი დაახლოებით ასეა:
- ჰეშის გამოთვლა გასაღზე.
- ჰეშის საფუძველზე, განსაზღვრულია ბაკეტი (კაფა) ბაკეტების მასივში.
- ბაკეტში ინახება წყვილები გასაღები-ღირებულების.
- ახალი მნიშვნელობის დამატებისას, რომელიც აქვს იგივე ჰეშს, Go გადის ბაკეტში და შედარებს გასაღებს თანასწორობის ფუნქციის გამოყენებით.
- თუ გასაღები ემთხვევა, ღირებულება განახლდება.
- თუ გასაღები ახალია, ელემენტი ემატება ბაკეტის სიას.
ამ გზით, შეჯახებები მართვადია, რადგან ერთ ბაკეტში ინახება რამდენიმე ელემენტი და გასაღებები სექვენტულად შედარებულია.
მაგალითი:
m := make(map[string]int)
m["key1"] = 1
m["key2"] = 2 // key2 შეიძლება ჰქონდეს იგივე ჰეში, რაც key1-ს
// key2-ის დამატებისას, Go შეამოწმებს ბაკეტს და დაამატებს ან განაახლებს ღირებულებას