FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

A Guide to BitSet in Java · stulingyu/tutorials@78ad55f · GitHub

Repository navigation

Commit 78ad55f

Browse files
committed
A Guide to BitSet in Java
1 parent 8d1c5ab commit 78ad55f

2 files changed

Lines changed: 158 additions & 0 deletions

File tree

‎core-java-modules/core-java-collections-3/pom.xml‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
</parent>
1717

1818
<dependencies>
19+
<dependency>
20+
<groupId>org.openjdk.jol</groupId>
21+
<artifactId>jol-core</artifactId>
22+
<version>${jol-core.version}</version>
23+
</dependency>
1924
<dependency>
2025
<groupId>org.openjdk.jmh</groupId>
2126
<artifactId>jmh-core</artifactId>
@@ -37,6 +42,7 @@
3742
<properties>
3843
<openjdk.jmh.version>1.19</openjdk.jmh.version>
3944
<assertj.version>3.11.1</assertj.version>
45+
<jol-core.version>0.10</jol-core.version>
4046
</properties>
4147

4248
</project>
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
package com.baeldung.collections.bitset;
2+
3+
import org.junit.Test;
4+
import org.openjdk.jol.info.ClassLayout;
5+
import org.openjdk.jol.info.GraphLayout;
6+
7+
import java.util.BitSet;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
public class BitSetUnitTest {
12+
13+
@Test
14+
public void givenBoolArray_whenMemoryLayout_thenConsumeMoreThanOneBit() {
15+
boolean[] bits = new boolean[1024];
16+
17+
System.out.println(ClassLayout.parseInstance(bits).toPrintable());
18+
}
19+
20+
@Test
21+
public void givenBitSet_whenMemoryLayout_thenConsumeObeBitPerFlag() {
22+
BitSet bitSet = new BitSet(1024);
23+
24+
System.out.println(GraphLayout.parseInstance(bitSet).toPrintable());
25+
}
26+
27+
@Test
28+
public void givenBitSet_whenSetting_thenShouldBeTrue() {
29+
BitSet bitSet = new BitSet();
30+
31+
bitSet.set(10);
32+
assertThat(bitSet.get(10)).isTrue();
33+
34+
bitSet.set(20, 30);
35+
for (int i = 20; i <= 29; i++) assertThat(bitSet.get(i)).isTrue();
36+
assertThat(bitSet.get(30)).isFalse();
37+
38+
bitSet.set(10, false);
39+
assertThat(bitSet.get(10)).isFalse();
40+
41+
bitSet.set(20, 30, false);
42+
for (int i = 20; i <= 30; i++) assertThat(bitSet.get(i)).isFalse();
43+
}
44+
45+
@Test
46+
public void givenBitSet_whenClearing_thenShouldBeFalse() {
47+
BitSet bitSet = new BitSet();
48+
bitSet.set(42);
49+
assertThat(bitSet.get(42)).isTrue();
50+
51+
bitSet.clear(42);
52+
assertThat(bitSet.get(42)).isFalse();
53+
54+
bitSet.set(10, 20);
55+
for (int i = 10; i < 20; i++) assertThat(bitSet.get(i)).isTrue();
56+
57+
bitSet.clear(10, 20);
58+
for (int i = 10; i < 20; i++) assertThat(bitSet.get(i)).isFalse();
59+
60+
bitSet.set(10, 20);
61+
bitSet.clear();
62+
for (int i = 0; i < 100; i++) assertThat(bitSet.get(i)).isFalse();
63+
}
64+
65+
@Test
66+
public void givenBitSet_whenGettingElements_thenShouldReturnRequestedBits() {
67+
BitSet bitSet = new BitSet();
68+
bitSet.set(42);
69+
70+
assertThat(bitSet.get(42)).isTrue();
71+
assertThat(bitSet.get(43)).isFalse();
72+
73+
bitSet.set(10, 20);
74+
BitSet newBitSet = bitSet.get(10, 20);
75+
for (int i = 0; i < 10; i++) assertThat(newBitSet.get(i)).isTrue();
76+
}
77+
78+
@Test
79+
public void givenBitSet_whenFlip_thenTogglesTrueToFalseAndViceVersa() {
80+
BitSet bitSet = new BitSet();
81+
bitSet.set(42);
82+
bitSet.flip(42);
83+
assertThat(bitSet.get(42)).isFalse();
84+
85+
bitSet.flip(12);
86+
assertThat(bitSet.get(12)).isTrue();
87+
88+
bitSet.flip(30, 40);
89+
for (int i = 30; i < 40; i++) assertThat(bitSet.get(i)).isTrue();
90+
}
91+
92+
@Test
93+
public void givenBitSet_whenGettingTheSize_thenReturnsTheSize() {
94+
BitSet defaultBitSet = new BitSet();
95+
assertThat(defaultBitSet.size()).isEqualTo(64);
96+
97+
BitSet bitSet = new BitSet(1024);
98+
assertThat(bitSet.size()).isEqualTo(1024);
99+
100+
assertThat(bitSet.cardinality()).isEqualTo(0);
101+
bitSet.set(10, 30);
102+
assertThat(bitSet.cardinality()).isEqualTo(30 - 10);
103+
104+
assertThat(bitSet.length()).isEqualTo(30);
105+
bitSet.set(100);
106+
assertThat(bitSet.length()).isEqualTo(101);
107+
108+
assertThat(bitSet.isEmpty()).isFalse();
109+
bitSet.clear();
110+
assertThat(bitSet.isEmpty()).isTrue();
111+
}
112+
113+
@Test
114+
public void givenBitSet_whenSetOperations_thenShouldReturnAnotherBitSet() {
115+
BitSet first = new BitSet();
116+
first.set(5, 10);
117+
118+
BitSet second = new BitSet();
119+
second.set(7, 15);
120+
121+
assertThat(first.intersects(second)).isTrue();
122+
123+
first.and(second);
124+
assertThat(first.get(7)).isTrue();
125+
assertThat(first.get(8)).isTrue();
126+
assertThat(first.get(9)).isTrue();
127+
assertThat(first.get(10)).isFalse();
128+
}
129+
130+
@Test
131+
public void givenBitSet_whenStream_thenStreamsAllSetBits() {
132+
BitSet bitSet = new BitSet();
133+
bitSet.set(15, 25);
134+
135+
bitSet.stream().forEach(System.out::println);
136+
}
137+
138+
@Test
139+
public void givenBitSet_whenNextOrPrev_thenReturnsTheNextClearOrSetBit() {
140+
BitSet bitSet = new BitSet();
141+
bitSet.set(15, 25);
142+
143+
assertThat(bitSet.nextSetBit(13)).isEqualTo(15);
144+
assertThat(bitSet.nextSetBit(25)).isEqualTo(-1);
145+
146+
assertThat(bitSet.nextClearBit(23)).isEqualTo(25);
147+
148+
assertThat(bitSet.previousClearBit(24)).isEqualTo(14);
149+
assertThat(bitSet.previousSetBit(29)).isEqualTo(24);
150+
assertThat(bitSet.previousSetBit(14)).isEqualTo(-1);
151+
}
152+
}

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL