Scala Collections - BitSet



Bitset is a common base class for mutable and immutable bitsets. Bitsets are sets of non-negative integers and are represented as variable-size arrays of bits packed into 64-bit words. The memory footprint of a bitset is represented by the largest number stored in it.

Declaring BitSet Variables

The following is the syntax for declaring an BitSet variable.

Syntax

var z : BitSet = BitSet(0,1,2)

Here, z is declared as an bit-set of non-negative integers which has three members. Values can be added by using commands like the following −

Command

var myList1: BitSet = myList + 3;

Processing BitSet

Below is an example program of showing how to create, initialize and process BitSet −

Example

import scala.collection.immutable.BitSet

object Demo {
   def main(args: Array[String]) = {
      var mySet: BitSet = BitSet(0, 1, 2);
      // Add an element
      var mySet1: BitSet = mySet + 3;
      // Remove an element
      var mySet2: BitSet = mySet - 2;
      var mySet3: BitSet = BitSet(4, 5);
      // Adding sets
      var mySet4: BitSet = mySet1 ++ mySet3;
      println(mySet);
      println(mySet1);
      println(mySet2);
      println(mySet4);	  
   }
}

Save the above program in Demo.scala. The following commands are used to compile and execute this program.

Command

\>scalac Demo.scala
\>scala Demo

Output

BitSet(0, 1, 2)
BitSet(0, 1, 2, 3)
BitSet(0, 1)
BitSet(0, 1, 2, 3, 4, 5)

Checking Membership

You can check if a value is present in a BitSet using the contains method. This method returns true if the value is present, and false otherwise.

Example

Try following example for checking membership -

import scala.collection.immutable.BitSet

object Demo {
   def main(args: Array[String]) = {
      var mySet: BitSet = BitSet(0, 1, 2, 3, 4, 5)
      // Check if the BitSet contains 3
      println(mySet.contains(3))
      // Check if the BitSet contains 6
      println(mySet.contains(6))
   }
}

Save the above program in Demo.scala. Use the following commands to compile and execute this program.

Command

> scalac Demo.scala
> scala Demo

Output

true
false

Finding Maximum and Minimum Elements

You can find the maximum and minimum elements in a BitSet using the max and min methods, respectively.

Example

Try following example for finding min and max elements -

import scala.collection.immutable.BitSet

object Demo {
   def main(args: Array[String]) = {
      var mySet: BitSet = BitSet(0, 1, 2, 3, 4, 5)
      // Find the maximum element
      println("Max element: " + mySet.max)
      // Find the minimum element
      println("Min element: " + mySet.min)
   }
}

Save the above program in Demo.scala. Use the following commands to compile and execute this program.

Command

> scalac Demo.scala
> scala Demo

Output

Max element: 5
Min element: 0

Converting BitSet to List

You can convert a BitSet to a List using the toList method. This is useful when you need to work with a list of elements.

Example

Try following example for converting BitSet elements to List elements.

import scala.collection.immutable.BitSet

object Demo {
   def main(args: Array[String]) = {
      var mySet: BitSet = BitSet(0, 1, 2, 3, 4, 5)
      // Convert BitSet to List
      val myList = mySet.toList
      println("List: " + myList)
   }
}

Save the above program in Demo.scala. Use the following commands to compile and execute this program.

Command

> scalac Demo.scala
> scala Demo

Output

List: List(0, 1, 2, 3, 4, 5)

Converting BitSet to Array

You can convert a BitSet to an Array using the toArray method. This is useful when you need to work with an array of elements.

Example

Try following example for converting a BitSet to Array -

import scala.collection.immutable.BitSet

object Demo {
   def main(args: Array[String]) = {
      var mySet: BitSet = BitSet(0, 1, 2, 3, 4, 5)
      // Convert BitSet to Array
      val myArray = mySet.toArray
      println("Array: " + myArray.mkString(", "))
   }
}

Save the above program in Demo.scala. Use the following commands to compile and execute this program.

Command

> scalac Demo.scala
> scala Demo

Output

Array: 0, 1, 2, 3, 4, 5

Intersection of BitSets

You can find the intersection of two BitSets using the & operator. This method returns a new BitSet containing elements that are present in both BitSets.

Example

Try following example of intersection of BitSet -

import scala.collection.immutable.BitSet

object Demo {
   def main(args: Array[String]) = {
      var mySet1: BitSet = BitSet(0, 1, 2, 3, 4, 5)
      var mySet2: BitSet = BitSet(3, 4, 5, 6, 7, 8)
      // Intersection of two BitSets
      val intersectSet = mySet1 & mySet2
      println("Intersection: " + intersectSet)
   }
}

Save the above program in Demo.scala. Use the following commands to compile and execute this program.

Command

> scalac Demo.scala
> scala Demo

Output

Intersection: BitSet(3, 4, 5)

Difference of BitSets

You can find the difference of two BitSets using the &~ operator. This method returns a new BitSet containing elements that are present in the first BitSet but not in the second.

Example

Try following example of difference between two BitSets -

import scala.collection.immutable.BitSet

object Demo {
   def main(args: Array[String]) = {
      var mySet1: BitSet = BitSet(0, 1, 2, 3, 4, 5)
      var mySet2: BitSet = BitSet(3, 4, 5, 6, 7, 8)
      // Difference of two BitSets
      val diffSet = mySet1 &~ mySet2
      println("Difference: " + diffSet)
   }
}

Save the above program in Demo.scala. Use the following commands to compile and execute this program.

Command

> scalac Demo.scala
> scala Demo

Output

Difference: BitSet(0, 1, 2)

Checking Subset

You can check if one BitSet is a subset of another using the subsetOf method. This method returns true if all elements of the first BitSet are present in the second BitSet.

Example

Try following example for checking subset -

import scala.collection.immutable.BitSet

object Demo {
   def main(args: Array[String]) = {
      var mySet1: BitSet = BitSet(1, 2, 3)
      var mySet2: BitSet = BitSet(1, 2, 3, 4, 5)
      // Check if mySet1 is a subset of mySet2
      val isSubset = mySet1.subsetOf(mySet2)
      println("Is mySet1 a subset of mySet2? " + isSubset)
   }
}

Save the above program in Demo.scala. Use the following commands to compile and execute this program.

Command

> scalac Demo.scala
> scala Demo

Output

Is mySet1 a subset of mySet2? true

Scala BitSet Summary

  • BitSet in Scala is a data structure that represents sets of non-negative integers using variable-size arrays of bits.
  • You can perform set operations, like, union, intersection, and difference in elements of BitSet.
  • You can also add, remove, and check membership of elements in BitSet.
  • Scala supports both immutable and mutable BitSets.
  • You can also apply higher-order functions like map, filter, and foreach in elements of BitSet.
Advertisements