Java Tutorial/Collections/BitSet

Материал из Java эксперт
Перейти к: навигация, поиск

Bit Set Operations

   <source lang="java">

public void set(int position) public void clear(int position) public boolean get(int position)</source>



{0, 1, 2, 3}


Cloning Bit Sets

The BitSet class implements the Cloneable interface, providing you with a clone() method.



   <source lang="java">

import java.util.BitSet; public class MainClass {

 public static void main(String args[]) {
   BitSet bites = new BitSet();
   bites.set(0);
   bites.set(1);
   bites.set(2);
   bites.set(3);
   BitSet bitSetClone = (BitSet) bites.clone();
   System.out.println(bites);
   System.out.println(bitSetClone);
 }

}</source>



{0, 1, 2, 3}
{0, 1, 2, 3}


Determining Set Size

A BitSet is a dynamically growing array containing bits.

This dynamically growing structure has two values describing its internal dimensions: a size and a length.



   <source lang="java">

public int size() public int length()</source>



64
4


Manipulating Sets of Bits

   <source lang="java">

public void and(BitSet set) public void or(BitSet set) public void xor(BitSet set) public void andNot(BitSet set)</source>



{0, 1, 2, 3}
{0, 1, 2, 3}
{0, 1, 2, 3}
{}
{}


Set value to BitSet and then do AND, OR and XOR actions

   <source lang="java">

import java.util.BitSet; class BitSetDemo {

 public static void main(String args[]) {
   BitSet bits1 = new BitSet(16);
   BitSet bits2 = new BitSet(16);
   for (int i = 0; i < 16; i++) {
     if ((i % 2) == 0)
       bits1.set(i);
     if ((i % 5) != 0)
       bits2.set(i);
   }
   System.out.println("Initial pattern in bits1: ");
   System.out.println(bits1);
   System.out.println("\nInitial pattern in bits2: ");
   System.out.println(bits2);
   // AND bits
   bits2.and(bits1);
   System.out.println("\nbits2 AND bits1: ");
   System.out.println(bits2);
   // OR bits
   bits2.or(bits1);
   System.out.println("\nbits2 OR bits1: ");
   System.out.println(bits2);
   // XOR bits
   bits2.xor(bits1);
   System.out.println("\nbits2 XOR bits1: ");
   System.out.println(bits2);
 }

}</source>





Use BitSet to mark holiday

   <source lang="java">

import java.util.BitSet; public class HolidaySked {

 BitSet sked;
 public HolidaySked() {
   sked = new BitSet(365);
   int[] holiday = { 1, 15, 50, 148, 185, 246, 281, 316, 326, 359 };
   for (int i = 0; i < holiday.length; i++) {
     addHoliday(holiday[i]);
   }
 }
 public void addHoliday(int dayToAdd) {
   sked.set(dayToAdd);
 }
 public boolean isHoliday(int dayToCheck) {
   boolean result = sked.get(dayToCheck);
   return result;
 }
 public static void main(String[] arguments) {
   HolidaySked cal = new HolidaySked();
   if (arguments.length > 0) {
     try {
       int whichDay = Integer.parseInt(arguments[0]);
       if (cal.isHoliday(whichDay)) {
         System.out.println("Day number " + whichDay + " is a holiday.");
       } else {
         System.out.println("Day number " + whichDay + " is not a holiday.");
       }
     } catch (NumberFormatException nfe) {
       System.out.println("Error: " + nfe.getMessage());
     }
   }
 }

}</source>