1. Introduction
A Hash Table is a data structure that stores key-value pairs and supports nearly instantaneous lookups, insertions, and deletions. It uses an array and a hashing function to determine where to store and retrieve the values. In case of collisions (when two different keys have the same hash value), one common resolution method is called chaining, where each cell in the array contains a linked list of key-value pairs.
2. Implementation Steps
1. Define a structure KeyValuePair that will store the key and value.
2. Define the HashTable class with an array of linked lists of KeyValuePair items.
3. Implement a basic hashing function to determine an index for each key.
4. Implement insert, retrieve, and remove methods.
5. Handle collisions using chaining.
3. Implementation in Swift
struct KeyValuePair<Key: Hashable, Value> { let key: Key var value: Value } class HashTable<Key: Hashable, Value> { // The main storage array private var storage: [LinkedList<KeyValuePair<Key, Value>>] private let capacity: Int init(capacity: Int) { self.capacity = capacity self.storage = Array(repeating: LinkedList<KeyValuePair<Key, Value>>(), count: capacity) } // 3. Basic hashing function private func hash(forKey key: Key) -> Int { return abs(key.hashValue) % capacity } // 4. Implement methods func insert(_ value: Value, forKey key: Key) { let keyValuePair = KeyValuePair(key: key, value: value) let index = hash(forKey: key) storage[index].append(keyValuePair) } func value(forKey key: Key) -> Value? { let index = hash(forKey: key) for case let pair in storage[index] where pair.key == key { return pair.value } return nil } func removeValue(forKey key: Key) { let index = hash(forKey: key) for (i, pair) in storage[index].enumerated() where pair.key == key { storage[index].remove(at: i) return } } } // Usage: let hashTable = HashTable<String, Int>(capacity: 5) hashTable.insert(123, forKey: "abc") hashTable.insert(456, forKey: "def") print(hashTable.value(forKey: "abc") ?? "Not Found") // Outputs: 123 hashTable.removeValue(forKey: "abc") print(hashTable.value(forKey: "abc") ?? "Not Found") // Outputs: Not Found
Output:
123 Not Found
Explanation:
1. KeyValuePair struct is a simple container for the key-value pairs we want to store in the hash table.
2. HashTable is our main class that uses an array as the underlying storage mechanism.
3. The hash function takes the hash value of a key and returns an index for storage. The % capacity ensures we don't go out of bounds of our storage array.
4. Insert, value, and removeValue methods provide the main functionality for the hash table. The value method iterates over the linked list in the relevant storage cell to find the value for a given key.
5. Chaining is implicitly handled as each cell in the storage array is a linked list. When multiple items hash to the same index, they're just appended to the end of the linked list.
DSA Related Swift Examples:
Swift Hello World Program Swift Program to Add Two Numbers Swift Program to Subtract Two Numbers Swift Program to Multiply Two Numbers Swift Program to Divide Two Numbers Swift Program to Find Remainder Swift Program to Check Even or Odd Swift Program to Find Factorial of a Number Swift Program to Generate Fibonacci Series Swift Program to Swap Two Numbers Without Using Temporary Variable Swift Program to Find Largest Among Three Numbers Swift Program to Calculate the Area of a Circle Swift Program to Reverse a Number Swift Program to Make a Simple Calculator Swift Program to Check Palindrome Swift Program to Count Number of Digits in an Integer Swift Program to Sum of Natural Numbers Swift Program to Display Times Table Swift Program to Check Prime Number Swift Program to Find LCM Swift Program to Find GCD Swift Program to Find the Power of a Number Swift Program to Split a String into Words Swift Program to Check Leap Year Swift Program to Join Two Strings Swift Program to Check Armstrong Number Swift Program to Find Sum of Array Elements Swift Program to Find the Largest Element of an Array Swift Program to Perform Matrix Addition Swift Program to Transpose a Matrix Swift Program to Multiply Two Matrices Swift Program to Find Length of a String Swift Program to Copy One String to Another String Swift Program to Concatenate Two Strings Swift Program to Search for a Character in a String Swift Program to Count Frequency of a Character in String Swift Program to Create a Simple Class and Object Swift Program to Implement Inheritance Swift Program to Handle Simple Exceptions Swift Variables and Constants Example Swift Data Types (Int, Double, String) Example Swift Optionals and Optional Binding Example Swift Tuples Example Swift Array Example Swift Dictionary Example Swift Set Example Swift Closures Example Swift Enums Example Swift Structures Example Swift Properties (Stored, Computed) Example Swift Methods (Instance, Type) Example Swift Subscripts Example Swift Inheritance and Overriding Example Swift Protocols Example Swift Extensions Example Swift Generics and Generic Functions Example Swift Error Handling with Do-Catch Example Swift Guard Statement Example Swift Defer Statement Example Swift Type Casting (as, is, as?) Example Swift Access Control Example Swift Attributes (@available, @discardableResult) Example Swift Pattern Matching Example Swift Switch Statement and Cases Example Swift For-In Loop Example Swift While and Repeat-While Loops Example Swift Conditional Statements (If, If-Else, Ternary) Example Swift Operators Example Swift Memory Management Example Swift Strong, Weak, and Unowned References Example Swift Initialization and Deinitialization Example Swift Protocol-Oriented Programming Example Swift Nested Types Example Swift Type Aliases Example Swift Dynamic Member Lookup Example Swift Lazy Stored Properties Example Swift KeyPaths Example Swift String Manipulation and Methods Example Swift Regular Expressions Example Swift
Comments
Post a Comment