Java Tutorial/Collections/BitSet
Версия от 17:44, 31 мая 2010; (обсуждение)
Содержание
Bit Set Operations
public void set(int position)
public void clear(int position)
public boolean get(int position)
{0, 1, 2, 3}
Cloning Bit Sets
The BitSet class implements the Cloneable interface, providing you with a clone() method.
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);
}
}
{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.
public int size()
public int length()
64 4
Manipulating Sets of Bits
public void and(BitSet set)
public void or(BitSet set)
public void xor(BitSet set)
public void andNot(BitSet set)
{0, 1, 2, 3} {0, 1, 2, 3} {0, 1, 2, 3} {} {}
Set value to BitSet and then do AND, OR and XOR actions
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);
}
}
Use BitSet to mark holiday
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());
}
}
}
}