TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
(1)BitSet类
大小可动态改变, 取值为true或false的位集合。用于表示一组布尔标志。
此类实现了一个按需增长的位向量。位 set 的每个组件都有一个 boolean 值。用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet 修改另一个 BitSet 的内容。 默认情况下,set 中所有位的初始值都是 false。 每个位 set 都有一个当前大小,也就是该位 set 当前所用空间的位数。注意,这个大小与位 set 的实现有关,所以它可能随实现的不同而更改。位 set 的长度与位 set 的逻辑长度有关,并且是与实现无关而定义的。 除非另行说明,否则将 null 参数传递给 BitSet 中的任何方法都将导致 NullPointerException。 在没有外部同步的情况下,多个线程操作一个 BitSet 是不安全的。
(2) 构造函数: BitSet() or BitSet(int nbits) (3) 一些方法
public void set(int pos): 位置pos的字位设置为true。
public void set(int bitIndex, boolean value) 将指定索引处的位设置为指定的值。
public void clear(int pos): 位置pos的字位设置为false。
public void clear() : 将此 BitSet 中的所有位设置为 false。
public int cardinality() 返回此 BitSet 中设置为 true 的位数。
public boolean get(int pos): 返回位置是pos的字位值。
public void and(BitSet other): other同该字位集进行与操作,结果作为该字位集的新值。
public void or(BitSet other): other同该字位集进行或操作,结果作为该字位集的新值。
public void xor(BitSet other): other同该字位集进行异或操作,结果作为该字位集的新值。
public void andNot(BitSet set) 清除此 BitSet 中所有的位,set - 用来屏蔽此 BitSet 的 BitSet
public int size(): 返回此 BitSet 表示位值时实际使用空间的位数。
public int length() 返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加 1。
public int hashCode(): 返回该集合Hash 码, 这个码同集合中的字位值有关。
public boolean equals(Object other): 如果other中的字位同集合中的字位相同,返回true。
public Object clone() 克隆此 BitSet,生成一个与之相等的新 BitSet。
public String toString() 返回此位 set 的字符串表示形式。 例1:标明一个字符串中用了哪些字符
- import java.util.BitSet;
- public class WhichChars{
- private BitSet used = new BitSet();
- public WhichChars(String str){
- for(int i=0;i< str.length();i++)
- used.set(str.charAt(i)); // set bit for char
- }
- public String toString(){
- String desc="[";
- int size=used.size();
- for(int i=0;i< size;i++){
- if(used.get(i))
- desc+=(char)i;
- }
- return desc+"]";
- }
- public static void main(String args[]){
- WhichChars w=new WhichChars("How do you do");
- System.out.println(w);
- }
- }
复制代码 运行:
C:work>java WhichChars
[ Hdouwy]
例2:筛选法求素数- import java.util.*;
- public class BitSetTest{
- public static void main(String[] args){
- BitSet sieve=new BitSet(1024);
- int size=sieve.size();
- for(int i=2;i< size;i++)
- sieve.set(i);
- int finalBit=(int)Math.sqrt(sieve.size());
-
- for(int i=2;i< finalBit;i++)
- if(sieve.get(i))
- for(int j=2*i;j< size;j+=i)
- sieve.clear(j);
-
- int counter=0;
- for(int i=1;i< size;i++){
- if(sieve.get(i)){
- System.out.printf("%5d",i);
- if(++counter%15==0)
- System.out.println();
- }
- }
- }
- }
- C:work>java BitSetTest
- 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
- 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113
- 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197
- 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281
- 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379
- 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463
- 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571
- 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659
- 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761
- 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863
- 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977
- 983 991 997 1009 1013 1019 1021
复制代码 例3:简单使用
- import java.util.BitSet;
- public class BitOHoney {
- public static void main(String args[]) {
- String names[] = { "Java", "Source", "and", "Support"};
- BitSet bits = new BitSet();
- for (int i = 0, n = names.length; i < n; i++) {
- if ((names[i].length() % 2) == 0) {
- bits.set(i);
- }
- }
- System.out.println(bits);
- System.out.println("Size : " + bits.size());
- System.out.println("Length: " + bits.length());
- for (int i = 0, n = names.length; i < n; i++) {
- if (!bits.get(i)) {
- System.out.println(names[i] + " is odd");
- }
- }
- BitSet bites = new BitSet();
- bites.set(0);
- bites.set(1);
- bites.set(2);
- bites.set(3);
- bites.andNot(bits);
- System.out.println(bites);
- }
- }
复制代码 运行:
C:work>java BitOHoney
{0, 1}
Size : 64
Length: 2
and is odd
Support is odd
{2, 3}
源码下载:http://file.javaxxz.com/2014/10/29/235617796.zip |
|