|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。
BitSet实践是由“二进制位”组成的一个Vector。假如但愿高效力地保留大批“开-关”信息,就应利用BitSet。它只要从尺寸的角度看才成心义;假如但愿的高效力的会见,那末它的速率会比利用一些固有范例的数组慢一些。
别的,BitSet的最小长度是一个长整数(Long)的长度:64位。这意味着假设我们筹办保留比这更小的数据,如8位数据,那末BitSet就显得华侈了。以是最好创立本人的类,用它包容本人的标记位。
在一个一般的Vector中,随我们到场愈来愈多的元素,汇合也会自我收缩。在某种水平上,BitSet也不破例。也就是说,它偶然会自行扩大,偶然则否则。并且Java的1.0版本仿佛在这方面做得最糟,它的BitSet体现非常差强者意(Java1.1已更正了这个成绩)。上面这个例子展现了BitSet是怎样运作的,同时演示了1.0版本的毛病:- //:Bits.java
- //DemonstrationofBitSet
- importjava.util.*;
- publicclassBits{
- publicstaticvoidmain(String[]args){
- Randomrand=newRandom();
- //TaketheLSBofnextInt():
- bytebt=(byte)rand.nextInt();
- BitSetbb=newBitSet();
- for(inti=7;i>=0;i--)
- if(((1<<i)&bt)!=0)
- bb.set(i);
- else
- bb.clear(i);
- System.out.println("bytevalue:"+bt);
- printBitSet(bb);
- shortst=(short)rand.nextInt();
- BitSetbs=newBitSet();
- for(inti=15;i>=0;i--)
- if(((1<<i)&st)!=0)
- bs.set(i);
- else
- bs.clear(i);
- System.out.println("shortvalue:"+st);
- printBitSet(bs);
- intit=rand.nextInt();
- BitSetbi=newBitSet();
- for(inti=31;i>=0;i--)
- if(((1<<i)&it)!=0)
- bi.set(i);
- else
- bi.clear(i);
- System.out.println("intvalue:"+it);
- printBitSet(bi);
- //Testbitsets>=64bits:
- BitSetb127=newBitSet();
- b127.set(127);
- System.out.println("setbit127:"+b127);
- BitSetb255=newBitSet(65);
- b255.set(255);
- System.out.println("setbit255:"+b255);
- BitSetb1023=newBitSet(512);
- //Withoutthefollowing,anexceptionisthrown
- //intheJava1.0implementationofBitSet:
- //b1023.set(1023);
- b1023.set(1024);
- System.out.println("setbit1023:"+b1023);
- }
- staticvoidprintBitSet(BitSetb){
- System.out.println("bits:"+b);
- Stringbbits=newString();
- for(intj=0;j<b.size();j++)
- bbits+=(b.get(j)?"1":"0");
- System.out.println("bitpattern:"+bbits);
- }
- }///:~
复制代码
随机数字天生器用于创立一个随机的byte、short和int。每个城市转换成BitSet内响应的位模子。此时统统都很一般,由于BitSet是64位的,以是它们都不会形成终极尺寸的增年夜。但在Java1.0中,一旦BitSet年夜于64位,就会呈现一些使人困惑不解的举动。假设我们设置一个只比BitSet以后分派存储空间年夜出1的一个位,它可以一般地扩大。但一旦试图在更高的地位设置位,同时不先打仗界限,就会失掉一个末路人的背例。这恰是因为BitSet在Java1.0里不克不及准确扩大酿成的。本例创立了一个512位的BitSet。构建器分派的存储空间是位数的两倍。以是假设设置位1024或更高的位,同时没有先设置位1023,就会在Java1.0里失掉一个背例。但侥幸的是,这个成绩已在Java1.1失掉了更正。以是假如是为Java1.0写代码,请只管制止利用BitSet。
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,net网页编程beans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。 |
|