java.util.BitSet

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:

  1. Read
  2. Write
  3. Delete
  4. Share
  5. Download
  6. Comment
  7. Edit
  8. Print

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.
Scroll to Top