Arrays & Collections
HashSet
Unique Collections
You're tracking which pages a user has visited. You don't want duplicates, and you need fast "have they seen this?" checks. HashSet automatically ignores duplicates and provides O(1) membership testing.
Collect unique tags
Add items to a set - duplicates are ignored.
import java.util.HashSet;
public class UniqueTags {
public static void main(String[] args) {
// Create a set of tags for a blog post
HashSet<String> tags = new HashSet<>();
System.out.println("=== Adding Blog Tags ===");
// Add tags
boolean added;
added = tags.add("java");
System.out.println("Add 'java': " + added + " → " + tags);
added = tags.add("programming");
System.out.println("Add 'programming': " + added + " → " + tags);
added = tags.add("tutorial");
System.out.println("Add 'tutorial': " + added + " → " + tags);
// Try to add duplicate
added = tags.add("java");
System.out.println("Add 'java' again: " + added + " → " + tags);
System.out.println("Duplicate ignored!");
// Add more tags
tags.add("beginner");
tags.add("coding");
tags.add("java");
System.out.println("\nWith more tags: " + tags);
System.out.println("\n=== Blog Post Tags ===");
System.out.println("Total unique tags: " + tags.size());
System.out.println("Tags: " + tags);
// Display as hashtags
System.out.println("\n=== Formatted ===");
for (String tag : tags) {
System.out.print("#" + tag + " ");
}
System.out.println();
}
}
add() returns false if element already exists. Set stays unique.
Fast membership check
Test if an item is in the set.
import java.util.HashSet;
import java.util.Arrays;
public class CheckMembership {
public static void main(String[] args) {
// Create an allowlist of premium users
HashSet<String> premiumUsers = new HashSet<>(Arrays.asList(
"alice", "bob", "carol", "david"
));
System.out.println("=== Premium Membership ===");
System.out.println("Premium users: " + premiumUsers);
// Check if user has access
String currentUser = ;
System.out.println("\n=== Access Check ===");
System.out.println("User: " + currentUser);
if (premiumUsers.contains(currentUser)) {
System.out.println("✓ Premium access granted!");
System.out.println("Welcome to exclusive content.");
} else {
System.out.println("✗ Not a premium user.");
System.out.println("Upgrade to access premium features!");
}
// Blocked users check
HashSet<String> blockedUsers = new HashSet<>(Arrays.asList(
"spammer", "troll", "eve"
));
System.out.println("\n=== Security Check ===");
if (blockedUsers.contains(currentUser)) {
System.out.println("⛔ User is blocked!");
} else {
System.out.println("✓ User is not blocked.");
}
// Check multiple users
System.out.println("\n=== Batch Check ===");
String[] usersToCheck = {"alice", "eve", "bob", "frank"};
for (String user : usersToCheck) {
String status = premiumUsers.contains(user) ? "Premium" : "Regular";
System.out.println(user + ": " + status);
}
}
}
import java.util.HashSet;
import java.util.Arrays;
public class CheckMembership {
public static void main(String[] args) {
// Create an allowlist of premium users
HashSet<String> premiumUsers = new HashSet<>(Arrays.asList(
"alice", "bob", "carol", "david"
));
System.out.println("=== Premium Membership ===");
System.out.println("Premium users: " + premiumUsers);
// Check if user has access
String currentUser = ;
System.out.println("\n=== Access Check ===");
System.out.println("User: " + currentUser);
if (premiumUsers.contains(currentUser)) {
System.out.println("✓ Premium access granted!");
System.out.println("Welcome to exclusive content.");
} else {
System.out.println("✗ Not a premium user.");
System.out.println("Upgrade to access premium features!");
}
// Blocked users check
HashSet<String> blockedUsers = new HashSet<>(Arrays.asList(
"spammer", "troll", "eve"
));
System.out.println("\n=== Security Check ===");
if (blockedUsers.contains(currentUser)) {
System.out.println("⛔ User is blocked!");
} else {
System.out.println("✓ User is not blocked.");
}
// Check multiple users
System.out.println("\n=== Batch Check ===");
String[] usersToCheck = {"alice", "eve", "bob", "frank"};
for (String user : usersToCheck) {
String status = premiumUsers.contains(user) ? "Premium" : "Regular";
System.out.println(user + ": " + status);
}
}
}
contains() is O(1) - much faster than ArrayList's O(n) search.
Remove an item
Remove elements from the set.
import java.util.HashSet;
import java.util.Arrays;
public class RemoveItem {
public static void main(String[] args) {
HashSet<String> cart = new HashSet<>(Arrays.asList(
"Laptop", "Mouse", "Keyboard", "Monitor", "Headphones"
));
System.out.println("=== Shopping Cart ===");
System.out.println("Items: " + cart);
System.out.println("Count: " + cart.size());
// Remove an item
String toRemove = "Mouse";
boolean removed = cart.remove(toRemove);
System.out.println("\n=== Removing Item ===");
System.out.println("Remove '" + toRemove + "': " + removed);
System.out.println("Cart: " + cart);
// Try to remove non-existent item
String notInCart = "Tablet";
removed = cart.remove(notInCart);
System.out.println("\nRemove '" + notInCart + "': " + removed);
System.out.println("(Item wasn't in cart, so nothing changed)");
// Remove more items
cart.remove("Keyboard");
cart.remove("Monitor");
System.out.println("\nAfter more removals: " + cart);
// Clear all
System.out.println("\n=== Clearing Cart ===");
System.out.println("Before clear: " + cart.size() + " items");
cart.clear();
System.out.println("After clear: " + cart.size() + " items");
System.out.println("Cart is empty: " + cart.isEmpty());
System.out.println("\n=== Final Cart ===");
System.out.println("Items: " + cart);
System.out.println("Count: " + cart.size());
}
}
remove() returns true if element was present, false otherwise.
Combine two sets
Create a union of two sets.
import java.util.HashSet;
import java.util.Arrays;
public class SetUnion {
public static void main(String[] args) {
// Two teams' skill sets
HashSet<String> teamA = new HashSet<>(Arrays.asList(
"Java", "Python", "SQL", "Git"
));
HashSet<String> teamB = new HashSet<>(Arrays.asList(
"JavaScript", "Python", "CSS", "Git"
));
System.out.println("=== Team Skills ===");
System.out.println("Team A: " + teamA);
System.out.println("Team B: " + teamB);
// Union: All skills combined
HashSet<String> allSkills = new HashSet<>(teamA); // Copy first
allSkills.addAll(teamB); // Add all from second
System.out.println("\n=== Union (All Skills) ===");
System.out.println("Combined: " + allSkills);
System.out.println("(Duplicates automatically removed)");
// Count unique skills
System.out.println("\n=== Statistics ===");
System.out.println("Team A skills: " + teamA.size());
System.out.println("Team B skills: " + teamB.size());
System.out.println("Unique combined: " + allSkills.size());
System.out.println("Overlap count: " +
(teamA.size() + teamB.size() - allSkills.size()));
// Practical example: Merge user permissions
System.out.println("\n=== Permission Merge ===");
HashSet<String> basicPerms = new HashSet<>(Arrays.asList(
"read", "comment"
));
HashSet<String> editorPerms = new HashSet<>(Arrays.asList(
"read", "write", "edit", "comment"
));
HashSet<String> adminPerms = new HashSet<>(Arrays.asList(
"read", "write", "edit", "delete", "manage"
));
// Build editor permissions (basic + editor)
HashSet<String> fullEditorPerms = new HashSet<>(basicPerms);
fullEditorPerms.addAll(editorPerms);
System.out.println("Editor has: " + fullEditorPerms);
// Build admin permissions (all combined)
HashSet<String> fullAdminPerms = new HashSet<>(basicPerms);
fullAdminPerms.addAll(editorPerms);
fullAdminPerms.addAll(adminPerms);
System.out.println("Admin has: " + fullAdminPerms);
}
}
addAll() adds all elements from another collection. Duplicates ignored.
Remove duplicates from list
Convert a list to set to eliminate duplicates.
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Arrays;
public class RemoveDuplicates {
public static void main(String[] args) {
// List with duplicate entries
ArrayList<String> emails = new ArrayList<>(Arrays.asList(
"alice@example.com",
"bob@example.com",
"alice@example.com", // duplicate
"carol@example.com",
"bob@example.com", // duplicate
"david@example.com",
"alice@example.com" // duplicate
));
System.out.println("=== Email List (with duplicates) ===");
System.out.println("Emails: " + emails);
System.out.println("Count: " + emails.size());
// Remove duplicates using HashSet
HashSet<String> uniqueEmails = new HashSet<>(emails);
System.out.println("\n=== After Removing Duplicates ===");
System.out.println("Unique: " + uniqueEmails);
System.out.println("Count: " + uniqueEmails.size());
System.out.println("Removed " + (emails.size() - uniqueEmails.size()) + " duplicates");
// Convert back to ArrayList if needed
ArrayList<String> cleanedList = new ArrayList<>(uniqueEmails);
System.out.println("\nAs ArrayList: " + cleanedList);
// Preserve original order using LinkedHashSet
System.out.println("\n=== Preserving Order ===");
java.util.LinkedHashSet<String> orderedUnique =
new java.util.LinkedHashSet<>(emails);
System.out.println("LinkedHashSet: " + orderedUnique);
System.out.println("(Maintains insertion order!)");
// Count duplicates
System.out.println("\n=== Duplicate Analysis ===");
java.util.HashMap<String, Integer> counts = new java.util.HashMap<>();
for (String email : emails) {
counts.put(email, counts.getOrDefault(email, 0) + 1);
}
for (String email : counts.keySet()) {
int count = counts.get(email);
if (count > 1) {
System.out.println(email + " appeared " + count + " times");
}
}
}
}
new HashSet<>(list) creates set from list, removing duplicates.
Exercise: SetOperations.java
Explore intersection, difference, and other set operations