BitSet
is a class in the java.util
package that implements a vector of bits that grows as needed. Each component of the bit set has a boolean value (true
for 1 and false
for 0). It is useful for storing flags, manipulating binary data, or working with sets efficiently using bit-level operations.
Key Features:
- Dynamic size (unlike arrays of booleans)
- Bitwise operations like AND, OR, XOR, ANDNOT
- Fast and memory-efficient for large sets of booleans
Commonly Used Constructors and Methods


Simple Program
import java.util.BitSet; public class SimpleBitSetDemo { public static void main(String[] args) { BitSet bits = new BitSet(); bits.set(0); bits.set(3); bits.set(5); System.out.println("BitSet: " + bits); System.out.println("Is bit at index 3 set? " + bits.get(3)); System.out.println("Number of bits set: " + bits.cardinality()); } }
Problem Statement
LotusJavaPrince and Mahesh are designing a permission system for a cloud-based document editor. Each user has 8 permissions:
- Read
- Write
- Delete
- Share
- Download
- Comment
- Edit
They need to manage these permissions using a space-efficient method. Use BitSet
to represent each user’s permissions. Allow enabling/disabling and comparing permission sets between users.
import java.util.BitSet; import java.util.Scanner; class UserPermission { private static final String[] PERMISSIONS = { "Read", "Write", "Delete", "Share", "Download", "Comment", "Edit", "Print" }; private BitSet permissions = new BitSet(8); public void grantPermission(int index) { if (index >= 0 && index < 8) permissions.set(index); } public void revokePermission(int index) { if (index >= 0 && index < 8) permissions.clear(index); } public void showPermissions() { System.out.println("Active Permissions:"); for (int i = 0; i < PERMISSIONS.length; i++) { if (permissions.get(i)) { System.out.println("- " + PERMISSIONS[i]); } } } public boolean hasSamePermissions(UserPermission other) { BitSet clone = (BitSet) this.permissions.clone(); clone.xor(other.permissions); return clone.isEmpty(); // True if identical } public static void displayAllPermissions() { System.out.println("Permissions Index List:"); for (int i = 0; i < PERMISSIONS.length; i++) { System.out.println(i + ": " + PERMISSIONS[i]); } } } public class PermissionSystem { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); UserPermission.displayAllPermissions(); UserPermission user1 = new UserPermission(); UserPermission user2 = new UserPermission(); System.out.print("\nEnter number of permissions to grant for User1: "); int n1 = scanner.nextInt(); System.out.println("Enter permission indices:"); for (int i = 0; i < n1; i++) { user1.grantPermission(scanner.nextInt()); } System.out.print("\nEnter number of permissions to grant for User2: "); int n2 = scanner.nextInt(); System.out.println("Enter permission indices:"); for (int i = 0; i < n2; i++) { user2.grantPermission(scanner.nextInt()); } System.out.println("\nUser 1 Permissions:"); user1.showPermissions(); System.out.println("\nUser 2 Permissions:"); user2.showPermissions(); if (user1.hasSamePermissions(user2)) { System.out.println("\n Both users have identical permissions."); } else { System.out.println("\n Users have different permissions."); } scanner.close(); } }
Output
Permissions Index List:
0: Read
1: Write
2: Delete
3: Share
4: Download
5: Comment
6: Edit
7: Print
Enter number of permissions to grant for User1: 4
Enter permission indices:
0
1
4
7
Enter number of permissions to grant for User2: 4
Enter permission indices:
0
1
4
7
User 1 Permissions:
Active Permissions:
- Read
- Write
- Download
- Print
User 2 Permissions:
Active Permissions:
- Read
- Write
- Download
- Print
Both users have identical permissions.
Code language: PHP (php)
BitSet
is efficient for storing and manipulating sets of bits.
- Dynamic in size and supports bitwise operations.
- Useful for flags, permissions, binary operations, and compact memory usage.