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.
