BitSet动态可变的位向量.docx
- 文档编号:9901087
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:18
- 大小:36.90KB
BitSet动态可变的位向量.docx
《BitSet动态可变的位向量.docx》由会员分享,可在线阅读,更多相关《BitSet动态可变的位向量.docx(18页珍藏版)》请在冰点文库上搜索。
BitSet动态可变的位向量
Ch13Utilities
13.1Java.util
(1)聚集
●BitSet:
动态可变的位向量。
●Enumeration:
一个接口,返回的对象枚举了一个值的集合。
●Vector:
动态可变的Object向量。
●Stack:
在Vector中加进后进先出方法后的扩展。
●Dictionary:
抽象类,完成关键字到值的算法。
●Hashtable:
用哈希码实现Dictionary
●Properties:
Hashtable扩展,其键和值都是String型。
(2)设计模式
●Observer/Observable:
这一对接口/类使得一个对象成为Observable,做法是当在一个Observable对象中发生某感兴趣的事件时,一个或多个Observer对象被通知到。
(3)杂项
●Date:
以秒为最小计数单位的时间、日期。
●Random:
可产生伪随机数序列的对象。
●StringTokenizer:
据界限符将字符串分解为Token。
13.2BitSet
(1)BitSet类
●大小可动态改变,取值为true或false的位集合。
用于表示一组布尔标志。
●存储的大小只要保证能索引。
超出有效范围就认为fasle。
(2)构造函数:
BitSet()orBitSet(intnbits)
(3)方法
●publicvoidset(intpos):
位置pos的字位设置为true。
●publicvoidclear(intpos):
位置pos的字位设置为false。
●publicbooleanget(intpos):
返回位置是pos的字位值。
●publicvoidand(BitSetother):
other同该字位集进行与操作,结果作为该字位集的新值。
●publicvoidor(BitSetother):
other同该字位集进行或操作,结果作为该字位集的新值。
●publicvoidxor(BitSetother):
other同该字位集进行异或操作,结果作为该字位集的新值。
●publicintsize():
在不增加集合容量前提下,返回可被设置或清除的最高的字位序号。
●publicinthashCode():
返回该集合Hash码,这个码同集合中的字位值有关。
●publicbooleanequals(Objectother):
如果other中的字位同集合中的字位相同,返回true。
(4)例1:
标明一个字符串中用了哪些字符
publicclassWhichChars{
privateBitSetused=newBitSet();
publicWhichChars(Stringstr){
for(inti=0;i used.set(str.charAt(i));//setbitforchar } publicStringtoString(){ Stringdesc="["; intsize=used.size(); for(inti=0;i if(used.get(i)) desc+=(char)i; } returndesc+"]"; } }; (5)例2: 筛选法求素数 BitSetsieve=newBitSet(1024); intsize=sieve.size(); for(inti=0;i intfinalBit=(int)Math.sqrt(sieve.size()); for(inti=2;i if(sieve.get(i)) for(intj=2*i;j sieve.clear(j); 13.3Enumeration接口/StringTokenizer 13.3.1Enumeration (1)方法 publicabstractbooleanhasMoreElements(): 不空返回true, publicabstratObjectnextElement(): 返回下一个元素。 若枚举已空,则引发NoSuchElementException。 (2)例子 importjava.util.Enumeration; classEnumimplementsEnumeration{ privateintcount=0; privatebooleanmore=true; publicbooleanhasMoreElements(){ returnmore; } publicObjectnextElement(){ count++; if(count>4)more=false; returnnewInteger(count); } } Enumerationenum=newEnum(); while(enum.hasMoreElements()) System.out.println(enum.nexElement()); 13.4.2StringTokenizer (1)Constructors publicStringTokenizer(Stringstr,Stringdelim,booleanreturnTokens) 对字符串str构作一个StringTokenizer,delim中字符作界限符。 returnTokens是将界限符作为标记返回还是跳过,若作为标记返回,则每个界限符单独返回。 publicStringTokenizer(Stringstr,Stringdelim) 等效与StringTokenizer(str,delim,false),即界限符不返回。 publicStringTokenizer(Stringstr) 等效于StringTokenizer(str,"\t\n\r"),即空格符作为界限符。 (2)Methods publicbooleanhasMoreTokens(): 若还有标记,返回true。 publicStringnextToken() 返回串中下个标记。 若无,则引发NoSuchElementException. publicStringnextToken(Stringdelim) 将界限符集改为delim中字符并返回下个标记。 注意没有只设新的界限集而不返回下一个标记的方法。 publicintcountTokens() 以当前界限集进行分解时字符串中还剩下的标记数。 (3)例1: 用空格和逗号来分隔字符串: Stringstr="Gone,andforgotten"; StringTokenizertokens=newStringTokenizer(str,","); while(token.hasMoreTokens()) System.out.println(token.nextToken()); (4)例2: 分析name=value importjava.util.StringTokenizer; classSTDemo{ staticStringin=“title=java: author=Xu: ”+ “email=xudx@nju”; publicstaticvoidmain(Stringargs[]){ StringTokenizerst=newStringTokenizer(in,”=: ”); while(st.hasMoreTokens()){ Stringkey=st.nextToken(); Stringvalue=st.nextToken(); System.out.println(key+”\t”+value); } } } 若要功能更强的机制来分解字符串,可用StreamTokenizer。 先用字符串创建一个StringBufferInputStream对象。 VectorandStack 13.4.1Vector: 大小可变的Object数组,存取,加入或删除, (1)构造函数 publicVector(intinitialCapacity,intcapacityIncrement) 创建一个空向量(初始容量,容量增量) publicVector(intinitialCapacity): Vector(initialCapacity,0) publicVector(): 以缺省初始容量建立空向量,容量增量为0。 (2)域 protectedObjectelementData[]: 存储元素的缓冲区。 protectedintelementCount: 当前缓冲区中的元素个数。 protectedintcapacityIncrement: 当elementData用完时增加的元素个数,为0则每次容量增倍。 (3)修改 publicfinalsynchronizedvoidsetElementAt(Objectobj,intindex): 将obj放在index处。 publicfinalsynchronizedvoidremoveElementAt(intindex) 将index处的元素删去,index后元素前移,大小减1。 publicfinalsynchronizedvoidinsertElementAt(Objectobj,intindex): 将obj插在index处,向量中index后元素后移。 publicfinalsynchronizedvoidaddElement(Objectobj) 将obj放在向量的尾上。 publicfinalsynchronizedbooleanremoveElement(Objectobj) 先找Obj,调用removeElementAt,or返回false。 publicfinalsynchronizedvoidremoveAllElements() 删除向量中所有元素,即变为空。 Example importjava.util.Vector; publicclassPolygon{//存储多边形顶点的Point表 privateVectorverties=newVector(); publicvoidadd(Pointp){ verties.addElement(p); } publicvoidremove(Pointp){ verties.removeElement(p); } publicintnumVerties(){ returnverties.size(); } //..其它方法.... } (4)检测 查找方法都用到Object.equals.若index无效,异常。 publicfinalsynchronizedObjectelementAt(intindex) publicfinalbooleancontains(Objectobj): 在向量中返回true。 publicfinalsynchronizedintindexOf(Objectobj,intindex) 从index开始,返回obj第一次出现的序号。 若不存在返回-1。 publicfinalintindexOf(Objectobj): =indexOf(obj,0)。 publicfinalsynchronizedintlastIndexOf(Objectobj,intindex) 反向搜索,返回obj第一次出现序号。 若不存在,返回-1。 publicfinalintlastIndexOf(Objectobj): =lastIndexOf(obj,0)。 publicfinalsynchronizedvoidcopyInfo(Object[]anArray) 将向量中的元素拷贝到指定的数组中 publicfinalsynchronizedEnumerationelement() 返回当前元素表的Enumeration。 publicfinalsynchronizedObjectfirstElement() 返回向量的第一个元素,若向量为空,引发异常。 publicfinalsynchronizedObjectlastElement() 返回最后一个元素,若向量为空,引发异常。 firstElement和lastElement这对方法能用来循环遍历向量中的元素。 (5)容量管理 publicfinalintsize(): 返回当前向量中元素个数。 publicfinalbooleanisEmpty(): 向量为空返回true。 publicfinalsynchronizedvoidtrimToSize() 将向量的容量置为当前它含有的元素个数,在元素个数稳定不变时可用它来减少向量的存储空间。 以后需要时仍可增加。 publicfinalsynchronizedvoidsetSize(intnewSize) 将向量的大小置为newSize,若为减少,则尾上超过的部分被丢弃,若增加则新元素置null。 publicfinalintcapacity() 返回当前容量。 即不增加新元素时,能容纳的元素个数。 pubfinalsynchronizedvoidensureCapacity(intminCapacity): 在需增加容量时,保证至少minCapacity。 (6)例子: 使Polygon能包含另一个多边形的顶点的方法 publicvoidmerge(Polygonother){ intotherSize=other.vertices.size(); vertices.ensureCapacity(vertices.size()+otherSize); for(inti=0;i vertices.addElement(other.vertices.elementAt(i)); } 13.4.2Stack: 在Vector中加了后进先出方法 (1)方法 publicbooleanempty() publicObjectpeek(): (仅)查看栈顶元素。 publicObjectpop(): 空时产生异常。 publicObjectpush(Objectitem): 空时产生异常。 publicintsearch(Objectitem): 离栈顶 (1)距离。 找不到返回-1. (2)例子: 东西转借 importjava.util.Stack publicclassBorrow{ privateStringitemName; privateStackhasIt=newStack(); publicBorrow(Stringname,Stringowner){ itemName=name; hasIt.push(owner);//首先压进主人的名字 } publicvoidborrow(Stringborrower){ hasIt.push(borrower); } publicStringcurrentHolder(){ return(String)hasIt.peek(); } publicStringreturnIt(){ Stringret=(String)hasIt.pop(); if(hasIt.empty());//不小心把主人弹出 hasIt.push(ret);//将主人名字入栈 returnret; } } 13.5Dictionary,Hashtable,Properties 13.5.1抽象类Dictionary: { publicabstractObjectput(Objectkey,Objectelement) 将element按key放在目录中。 返回按key存放的旧元素。 若该key在目录中未定义,则返回null。 publicabstractObjectget(Objectkey) 返回key相关联的对象,若未定义,则返回null。 publicabstractObjectremove(Objectkey) 删去,并返回该元素。 若key不在目录中,返回null。 publicabstractintsize(): 元素个数。 publicabstractbooleanisEmpty(): 若空返回null。 publicabstractEnumerationkeys(): 返回关键字的枚举: publicabstractEnumerationelements(): 返回元素的枚举。 13.5.2Hashtable Hashtable是常用的关键字/元素对象存储机制。 通用,简洁,效率高。 Hashtabl有能力, Hash表由hashCode(Key)方法生成hash码,应尽可能地减少冲突, (1)Constructors publicHashtable()/(intinitCapacity)/(intinitCapacity,floatloadFactor): loadFactor: 0.0-1.0(0.75) 当元素个数超过了负载因子同容量的乘积时,要改变大小。 (2)Methods(除Dictionary方法外) publicsynchronizedbooleancontainsKey(Objectkey) 若含有同关键字key对应的元素,返回true。 publicsynchronizedbooleancontains(Objectelement) 比containsKey方法费时得多。 publicsynchronizedvoidclear(): 清除,不包含任何关键字。 publicsynchronizedObjectclone(): 关键字及元素不克隆。 (3)Example Hashtableht=newHashtable(); ht.put(“one”,newInteger (1)); ht.put(“two”,newInteger (2)); ht.put(“three”,newInteger(3)); System.out.println(“TWO: ”+ht.get(“two”)) 5.3Properties: (1)Fields: protectedPropertiesdefaults; (2)Constructors publicProperties() publicProperties(Propertiesdefaults) 以defaults创建一个空表,用于查找未在表中指定的性质。 (3)Methods publicStringgetProperty(Stringkey) 取元素,若没,则查找缺省表(若有的话)。 找不到返回null。 publicStringgetProperty(Stringkey,Stringdefault) 找不到时返回default。 privatevoidsave(OutputStreamout,Stringheader) 将内容存到outputStream中。 header作为单行注解写到输出流首部。 publicsynchronizedvoidload(InputStreamin)throwsIOException 从inputStream中加载先前用save创建的表。 不涉及缺省值。 publicEnumerationpropertyNames(): 关键字的枚举 publicvoidlist(PrintStreamout) 向PrintStream流中打印当前表。 对调试非常有用。 (4)Example Propertiesprop=newProperties(); prop.put(“Title”,”puttitlehere”); prop.put(“Author”,“yournamehere”); prop.put(“isbn”,”isbnnotset”); Propertiesbook=newProperties(prop); book.put(“Title”,“java”); book.put(“Author”,“Xu”); //book.getProperty(“Title”);? java //book.getProperty(“isbn”);? isbnnotset //book.getProperty(“ean”,”! ! ! ”);? ! ! ! 13.6ObserverInterface/ObservableClass 某对象(必须是Observable子类)变化时,可能要通知若干其它(observer)对象。 Observable对象维护Observer对象表,当发生变化时,通过调用这些Observer对象的update方法通知它们。 13.6.1TheObserverInterface publicabstractvoidupdate(Observableobj,Objectarg) 13.6.2TheObservableClass publicsynchronizedvoidaddObserver(Observero) 在observer表中加一个Observer。 publicsynchronizedvoiddeleteObserver(Observero) 从observer表中删去一个Observer。 publicsynchronizedvoiddeleteObservers() 从observer表中删去所有Observ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BitSet 动态 可变 向量