Junior — Middle
Hoe onderscheidt Swift tussen twee objecten bij een hashbotsing?
sobes.tech AI
Antwoord van AI
In Swift wordt de methode isEqual(_:) gebruikt om objecten te vergelijken en hash-collisies op te lossen. Wanneer twee objecten dezelfde hash hebben (collisie), roept het systeem deze methode ook aan om te controleren of de objecten echt gelijk zijn.
Proces:
- De hash van het object wordt berekend via
hash(into:). - Als twee objecten dezelfde hash hebben, wordt
isEqual(_:)aangeroepen voor een exacte vergelijking. - Als
isEqual(_:)trueretourneert, worden de objecten als gelijk beschouwd, anders als verschillend.
Dit maakt het mogelijk om correct te werken met collecties zoals Set of sleutels in woordenboeken, zelfs bij hash-collisies.
Voorbeeld van implementatie:
class Person: Hashable {
let id: Int
let name: String
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id && lhs.name == rhs.name
}
}
Hier, als twee Person-objecten dezelfde hash hebben (bijvoorbeeld, dezelfde id), wordt de operator == aangeroepen voor de definitieve vergelijking.