Giriş
Açıklaması şöyle.
Kaç bit büyüklüğünde bellek istediğimizi belirtiriz.
Örnek
Şöyle yaparız.
Kaç tane true olduğunu döndürür.
Açıklaması şöyle.
BitSet sınıfı bitleri bir long dizisi şeklinde saklar.A BitSet is not safe for multithreaded use without external synchronization.
/**
* The internal field corresponding to the serialField "bits".
*/
private long[] words;
Bence BitSet çok gıcık bir sınıf çünkü
- size() metodu içinde kaç tane bit saklanabileceğini belirtir. Hep 64 ve katıdır
- length() metodu ise en soldaki 1 olan bitin konumunu verir.
Örnek
Elimizde şöyle bir kod olsun. Bir daha belirtilen kapasite olan 3 değerine ulaşma imkanı yok
BitSet bs = new BitSet(3);System.out.println(bs.size()); //64System.out.println(bs.length()); //0bs.set(0);System.out.println(bs.length()); //1
constructor
Şöyle yaparız.BitSet bits = new BitSet();
constructorKaç bit büyüklüğünde bellek istediğimizi belirtiriz.
Örnek
Şöyle yaparız.
BitSet bits = new BitSet((1<<31)- 1);
cardinality metoduKaç tane true olduğunu döndürür.
Örnek
Şöyle yaparız.
get metodu - int
Örnek
Şöyle yaparız.
Şöyle yaparız.
[fromIndex , toIndex) arasındaki bitleri yeni bir BitSet olarak döner.
length metodu
length() mantıksal uzunluğunu verir.
Örnek
Şöyle yaparız
Belirtilen konumdan sonra gelen ilk 0 değerine sahip bit adresini döndürür.
set metodu - int
Belirtilen indekse değer atar.
Örnek
Şöyle yaparız.
[from - to) aralığını true yapar. Şöyle yaparız.
Sınıf içinde toplam kaç bit depolanacağını verir. size() sonucu long [] olduğu için hep 64 bit ve katı olacaktır.
Örnek
Şöyle yaparız
toByteArray metodu
Şöyle yaparız.
Şöyle yaparız
byte[] Little Endian olmalıdır. Yani Java içindeki bir long değişkeni byte[] haline çevirip valueOf() metoduna verirsek Java Big Endian olduğu için istediğimiz şeyi elde edemeyiz.
Örnek
Şöyle yaparız.
Şöyle yaparız.
int numberOfTrues = bits.cardinality();
Örnek
Şöyle yaparız
BitSet bitSet = new BitSet(3); // 3 bits
bitSet.set(0); // sets position 0 to true
bitSet.set(1); // sets position 1 to true
bitSet.set(2); // sets position 2 to true
int cardinality = bitSet.cardinality();
System.out.println(cardinality);
// Output: 3
Örnek
Şöyle yaparız.
int i = ...;
boolean v = bits.get(i);
ÖrnekŞöyle yaparız.
int i = 0
if (!bits.get(i)) {
...
}
get metodu - fromIndex + toIndex[fromIndex , toIndex) arasındaki bitleri yeni bir BitSet olarak döner.
length metodu
length() mantıksal uzunluğunu verir.
Örnek
Şöyle yaparız
BitSet bits = ...;
System.out.println("Bitset length: " + bitSet.length());
Çıktı olarak şunu alırız.Bitset length: 41
nextClearBit metoduBelirtilen konumdan sonra gelen ilk 0 değerine sahip bit adresini döndürür.
set metodu - int
Belirtilen indekse değer atar.
Örnek
Şöyle yaparız.
int i = 0; i < 10; i++) {
bits.set(i,true);
set metodu - int + int[from - to) aralığını true yapar. Şöyle yaparız.
BitSet bset = new BitSet(N); // Initial capacity for N bits.
bset.set(0, N); // Set a range to true for 0 upto N-1.
size metoduSınıf içinde toplam kaç bit depolanacağını verir. size() sonucu long [] olduğu için hep 64 bit ve katı olacaktır.
Örnek
Şöyle yaparız
BitSet bits =
System.out.println("Bitset size: " + bits.size());
Çıktı olarak şunu alırız.Bitset size: 64
Örnek
Bu metod biraz problemli. Elimizde şöyle bir kod olsun. Burada signed integer overflow problemi var.
BitSet bs = new BitSet(Integer.MAX_VALUE);
System.out.println(bs.size()); //-2147483648
Açıklaması şöyle
A BitSet may hold up to (Integer.MAX_VALUE + 1) bits, so size() physically cannot return all possible values.
Şöyle yaparız
BitSet bs = new BitSet(Integer.MAX_VALUE);
long longSize = Integer.toUnsignedLong(bs.size()); // will be 2147483648
Şöyle yaparız.
bitSet.toByteArray();
toLongArray metoduŞöyle yaparız
int n = 12345;
BitSet bs = BitSet.valueOf(new long[]{n});
long l = bs.toLongArray()[0];
valueOf metodu - byte []byte[] Little Endian olmalıdır. Yani Java içindeki bir long değişkeni byte[] haline çevirip valueOf() metoduna verirsek Java Big Endian olduğu için istediğimiz şeyi elde edemeyiz.
Örnek
Şöyle yaparız.
byte b = ...;
BitSet bitSet = BitSet.valueOf(new byte[] { b });
valueOf metodu - long []Şöyle yaparız.
long currentTimeMillis = System.currentTimeMillis();
BitSet bitSet = BitSet.valueOf(new long[]{currentTimeMillis});
Hiç yorum yok:
Yorum Gönder