Sobes.tech
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:

  1. De hash van het object wordt berekend via hash(into:).
  2. Als twee objecten dezelfde hash hebben, wordt isEqual(_:) aangeroepen voor een exacte vergelijking.
  3. Als isEqual(_:) true retourneert, 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.