📖 Scenario: Imagine you are organizing a small library. You want to quickly find books by their titles. To do this, you decide to use a hash table, which helps you store and find books fast by turning their titles into numbers called hash codes.
🎯 Goal: You will create a simple hash table using an array and a hash function. You will store book titles in the hash table, then retrieve the book title using the book title.
📋 What You'll Learn
Create a hash table array of size 10
Write a hash function that converts a book title to an index
Store book titles in the hash table
Retrieve and print the stored book title for a given book title
💡 Why This Matters
🌍 Real World
Hash tables are used in many applications like databases, caches, and dictionaries to quickly find data using keys.
💼 Career
Understanding hash tables and hash functions is essential for software developers to optimize data storage and retrieval.
Progress0 / 4 steps
1
Create the hash table array
Create a String array called hashTable with size 10 to store book titles.
DSA Java
Hint
Use new String[10] to create an array of size 10.
2
Write the hash function
Create a method called hashFunction that takes a String called key and returns an int. The method should calculate the sum of the ASCII values of all characters in key and return the sum modulo 10.
DSA Java
Hint
Loop through each character in the string and add its ASCII value to sum. Use modulo 10 to get the index.
3
Store book titles in the hash table
Use the hashFunction to find the index for the book title "JavaBasics" and store it in the hashTable array at that index.
DSA Java
Hint
Call hashFunction with "JavaBasics" and save the result in index. Then assign "JavaBasics" to hashTable[index].
4
Retrieve and print the stored book title
Use the hashFunction to find the index of "JavaBasics" and print the value stored in hashTable at that index.
DSA Java
Hint
Use System.out.println(hashTable[index]) to print the stored book title.
Practice
(1/5)
1. What is the main purpose of a hash function in a hash table?
easy
A. To encrypt the data stored in the table
B. To sort the keys in ascending order
C. To convert a key into an index for storing values
D. To count the number of elements in the table
Solution
Step 1: Understand the role of a hash function
A hash function takes a key and transforms it into an index number that points to a location in the hash table.
Step 2: Compare options with the hash function role
Only To convert a key into an index for storing values describes converting a key into an index, which is the main purpose of a hash function.
Final Answer:
To convert a key into an index for storing values -> Option C
Quick Check:
Hash function = key to index [OK]
Hint: Hash function maps keys to indexes in the table [OK]
Common Mistakes:
Thinking hash functions sort keys
Confusing hashing with encryption
Believing hash functions count elements
2. Which of the following is the correct way to declare a HashMap in Java using built-in classes?
easy
A. Hashtable map = new Hashtable();
B. HashMap map = new HashMap<>();
C. HashTable map = new HashTable<>();
D. HashMap map = new HashMap();
Solution
Step 1: Identify correct class names and syntax
Java's standard hash table class is HashMap (case-sensitive). Hashtable is also valid but legacy and requires type parameters.
Step 2: Check each option's syntax
HashMap map = new HashMap<>(); uses correct generic syntax with HashMap. Hashtable map = new Hashtable(); misses generics. HashTable map = new HashTable<>(); uses wrong class name 'HashTable' (capital T). HashMap map = new HashMap(); reverses generic placement incorrectly.
Hint: Use HashMap with generics and diamond operator <> [OK]
Common Mistakes:
Using wrong class name 'HashTable'
Omitting generics for type safety
Incorrect generic syntax placement
3. What will be the output of the following Java code snippet?
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
map.put("apple", 30);
System.out.println(map.get("apple"));
}
}
medium
A. 30
B. 20
C. 10
D. null
Solution
Step 1: Understand put() behavior in HashMap
When a key already exists, put() replaces the old value with the new one.
Step 2: Trace the put() calls for key "apple"
First put("apple", 10) adds key with value 10. Second put("apple", 30) replaces value 10 with 30.
Final Answer:
30 -> Option A
Quick Check:
Last value for "apple" = 30 [OK]
Hint: Last put for a key overwrites previous value [OK]
Common Mistakes:
Assuming values accumulate instead of overwrite
Confusing keys and values
Expecting null for existing keys
4. Identify the error in the following Java code that uses a hash table:
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap map = new HashMap<>();
map.put(1, "One");
map.put(2, "Two");
System.out.println(map.get("1"));
}
}
medium
A. HashMap cannot store Integer keys
B. Missing import statement for HashMap
C. Incorrect syntax for put() method
D. Using wrong key type in get() method
Solution
Step 1: Check key types used in HashMap and get()
The HashMap is declared with Integer keys. The get() method is called with a String "1" instead of Integer 1.
Step 2: Understand type mismatch effect
Since keys are Integer, get("1") returns null because "1" (String) is not equal to 1 (Integer).
Final Answer:
Using wrong key type in get() method -> Option D
Quick Check:
Key type mismatch causes null result [OK]
Hint: Match key types exactly when using get() [OK]
Common Mistakes:
Passing String key instead of Integer
Ignoring type safety warnings
Assuming automatic type conversion
5. You want to design a hash function for a hash table that stores student IDs (integers) as keys. Which of the following hash functions is best to minimize collisions for IDs mostly ranging from 1000 to 9999?
hard
A. hash(key) = key % 100
B. hash(key) = key % 10000
C. hash(key) = key / 1000
D. hash(key) = key % 10
Solution
Step 1: Analyze the key range and hash function outputs
Keys range from 1000 to 9999. Using modulo 10 (hash(key) = key % 10) gives only 10 buckets, causing many collisions. Modulo 10000 (hash(key) = key % 10000) returns the key itself, which is too large for typical table size. Division by 1000 (hash(key) = key / 1000) gives values 1 to 9, only 9 buckets, too small.