📖 Scenario: You are working in a small bookstore. You want to count how many copies of each book title are currently in stock. This will help you know which books are popular and need restocking.
🎯 Goal: Build a program that counts the number of copies for each book title using a hash map (dictionary). You will create the data, set up a counter map, count the frequencies, and then print the results.
📋 What You'll Learn
Create a list of book titles (each entry represents one copy in stock)
Create an empty hash map to store frequency counts
Use a for loop to count frequencies of each book title
Print the frequency map showing book titles and their counts
💡 Why This Matters
🌍 Real World
Counting frequencies is useful in inventory management, word counting, and data analysis.
💼 Career
Many programming jobs require counting and grouping data efficiently using hash maps or dictionaries.
Progress0 / 4 steps
1
Create the initial book stock data
Create a List<String> called books with these exact titles in order: "The Hobbit", "1984", "Dune", "The Hobbit", "Dune". Each entry represents one copy in stock.
DSA Java
Hint
Use Arrays.asList to create the list with the exact titles in order.
2
Create an empty frequency map
Create an empty HashMap<String, Integer> called frequencyMap to store the count of each book title.
DSA Java
Hint
Use new HashMap<>() to create an empty map.
3
Count the frequency of each book title
Use a for loop with variable book to iterate over books. Inside the loop, update frequencyMap to count how many times each book appears. If the book is not in the map, add it with count 1. If it is already there, increase its count by 1.
DSA Java
Hint
Use containsKey to check if the book is already counted.
4
Print the frequency map
Print the frequencyMap to show the count of each book title.
DSA Java
Hint
Use System.out.println(frequencyMap); to print the map.
Practice
(1/5)
1. What is the main purpose of using a hash map in the Frequency Counter Pattern?
easy
A. To count how many times each element appears in a collection
B. To sort elements in ascending order
C. To store elements without duplicates
D. To reverse the order of elements
Solution
Step 1: Understand the role of a hash map
A hash map stores key-value pairs, allowing quick lookup and update of counts.
Step 2: Apply to frequency counting
By using elements as keys and counts as values, it tracks how many times each element appears.
Final Answer:
To count how many times each element appears in a collection -> Option A
Confusing frequency counting with removing duplicates
Using hash map to reverse order
2. Which of the following is the correct way to declare a HashMap to count frequencies of characters in Java?
easy
A. HashMap freq = new HashMap<>();
B. HashMap freq = new HashMap<>();
C. HashMap<String> freq = new HashMap<>();
D. HashMap<Character> freq = new HashMap<>();
Solution
Step 1: Identify correct generic types for HashMap
Keys are characters, so use Character; values are counts, so use Integer.
Step 2: Check syntax correctness
HashMap freq = new HashMap<>(); is valid Java syntax.
Final Answer:
HashMap freq = new HashMap<>(); -> Option B
Quick Check:
Correct generics and syntax = HashMap freq = new HashMap<>(); [OK]
Hint: Use wrapper classes Character and Integer for HashMap keys and values [OK]
Common Mistakes:
Using primitive types like int in generics
Missing value type in HashMap declaration
Incorrect generic syntax
3. What will be the output of the following Java code?
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
String s = "banana";
HashMap freq = new HashMap<>();
for (char c : s.toCharArray()) {
freq.put(c, freq.getOrDefault(c, 0) + 1);
}
System.out.println(freq.get('a'));
}
}
medium
A. 2
B. null
C. 1
D. 3
Solution
Step 1: Count occurrences of 'a' in "banana"
String "banana" has 'a' at positions 1, 3, and 5, total 3 times.
Step 2: Check code logic for frequency counting
Code uses getOrDefault to count each character's frequency correctly.
Final Answer:
3 -> Option D
Quick Check:
Count of 'a' in "banana" = 3 [OK]
Hint: Count characters manually, then verify with getOrDefault logic [OK]
Common Mistakes:
Counting 'a' incorrectly as 2 or 1
Confusing getOrDefault behavior
Expecting null for existing keys
4. Identify the error in the following Java code snippet that tries to count frequencies of integers:
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
int[] nums = {1, 2, 2, 3};
HashMap freq = new HashMap<>();
for (int num : nums) {
freq.put(num, freq.get(num) + 1);
}
System.out.println(freq);
}
}
medium
A. Using freq.get(num) without checking if key exists causes NullPointerException
B. HashMap declaration is incorrect
C. The for loop syntax is invalid
D. Printing freq directly causes syntax error
Solution
Step 1: Analyze freq.get(num) usage inside loop
freq.get(num) returns null if key not present, so null + 1 causes NullPointerException.
Step 2: Identify missing default value handling
Code should use freq.getOrDefault(num, 0) to avoid null on first occurrence.
Final Answer:
Using freq.get(num) without checking if key exists causes NullPointerException -> Option A
Quick Check:
NullPointerException due to missing default value [OK]
Hint: Use getOrDefault to avoid null when key missing [OK]
Common Mistakes:
Ignoring possibility of null from get()
Thinking HashMap declaration is wrong
Assuming printing freq causes error
5. Given two integer arrays arr1 and arr2, which Java code snippet correctly checks if arr2 contains the same frequency of elements as arr1 using the Frequency Counter Pattern?
hard
A. HashMap freq1 = new HashMap<>();
HashMap freq2 = new HashMap<>();
for (int n : arr1) freq1.put(n, freq1.getOrDefault(n, 0) + 1);
for (int n : arr2) freq2.put(n, freq2.getOrDefault(n, 0) + 1);
return freq1.size() == freq2.size();
B. HashMap freq = new HashMap<>();
for (int n : arr1) freq.put(n, freq.getOrDefault(n, 0) + 1);
for (int n : arr2) freq.put(n, freq.getOrDefault(n, 0) - 1);
return freq.size() == 0;
C. HashMap freq = new HashMap<>();
for (int n : arr1) freq.put(n, freq.getOrDefault(n, 0) + 1);
for (int n : arr2) freq.put(n, freq.getOrDefault(n, 0) - 1);
for (int count : freq.values()) if (count != 0) return false;
return true;
D. HashMap freq = new HashMap<>();
for (int n : arr1) freq.put(n, freq.getOrDefault(n, 0) + 1);
for (int n : arr2) freq.put(n, freq.getOrDefault(n, 0) + 1);
return freq.size() == arr1.length;
Solution
Step 1: Understand frequency counting for both arrays
Count frequencies of arr1 elements positively, then subtract frequencies for arr2 elements.
Step 2: Verify all counts are zero
If all counts are zero, frequencies match; otherwise, they differ.
Final Answer:
Code that increments for arr1, decrements for arr2, then checks zero counts -> Option C
Quick Check:
Increment then decrement counts, check zero [OK]
Hint: Add counts for arr1, subtract for arr2, verify all zero [OK]
Common Mistakes:
Checking sizes of two separate maps instead of contents
Adding counts for both arrays instead of subtracting
Checking map size instead of counts
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.