答案:13.1 Java.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.2 BitSet
(1) BitSet类
大小可动态改变, 取值为true或false的位集合。用于表示一组布尔标志。
存储的大小只要保证能索引。超出有效范围就认为fasle。
(2) 构造函数: BitSet() or BitSet(int nbits)
(3) 方法
public void set(int pos): 位置pos的字位设置为true。
public void clear(int pos): 位置pos的字位设置为false。
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 int size(): 在不增加集合容量前提下,返回可被设置或清除的最高的字位序号。
public int hashCode(): 返回该集合Hash 码, 这个码同集合中的字位值有关。
public boolean equals(Object other): 如果other中的字位同集合中的字位相同,返回true。
(4) 例1:标明一个字符串中用了哪些字符
public class WhichChars{
private BitSet used = new BitSet();
public WhichChars(String str){
for(int i=0;i<str.lenth();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+"]";
}
};
例2:筛选法求素数
BitSet sieve=new BitSet(1024);
int size=sieve.size();
for (int i=0;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);
13.3 Enumeration接口/ StringTokenizer
13.3.1 Enumeration
(1) 方法
public abstract boolean hasMoreElements():不空返回true,
public abstrat Object nextElement(): 返回下一个元素。若枚举已空,则引发NoSuchElementException。
(2) 例子
import java.util.Enumeration;
class Enum implements Enumeration {
private int count = 0;
private boolean more = true;
public boolean hasMoreElements() {
return more;
}
public Object nextElement() {
count++;
if (count >4 ) more = false;
return new Integer(count);
}
}
Enumeration enum = new Enum();
while (enum.hasMoreElements())
System.out.println(enum.nexElement());
13.4.2 StringTokenizer
(1) Constructors
public StringTokenizer(String str,String delim,boolean returnTokens)
对字符串str构作一个StringTokenizer, delim中字符作界限符。returnTokens是将界限符作为标记返回还是跳过,若作为标记返回,则每个界限符单独返回。
public StringTokenizer(String str,String delim)
等效与StringTokenizer(str,delim,false),即界限符不返回。
public StringTokenizer(String str)
等效于StringTokenizer(str," \t\n\r"),即空格符作为界限符。
(2) Methods
public boolean hasMoreTokens(): 若还有标记,返回true。
public String nextToken()
返回串中下个标记。若无,则引发NoSuchElementException.
public String nextToken(String delim)
将界限符集改为delim中字符并返回下个标记。注意没有只设新的界限集而不返回下一个标记的方法。
public int countTokens()
以当前界限集进行分解时字符串中还剩下的标记数。
(3) 例1: 用空格和逗号来分隔字符串:
String str = "Gone, and forgotten";
StringTokenizer tokens = new StringTokenizer(str," ,");
while(token.hasMoreTokens())
System.out.println(token.nextToken());
(4) 例2: 分析name=value
import java.util.StringTokenizer;
class STDemo {
static String in = *title=java: author=Xu:*+
*email=xudx@nju*;
public static void main(String args[]){
StringTokenizer st= new StringTokenizer(in,*= :*);
while (st.hasMoreTokens()) {
String key = st.nextToken();
String value = st.nextToken();
System.out.println(key+*\t*+value);
}
}
}
若要功能更强的机制来分解字符串, 可用StreamTokenizer。先用字符串创建一个StringBufferInputStream对象。
Vector and Stack
13.4.1 Vector: 大小可变的Object数组,存取, 加入或删除,
(1) 构造函数
public Vector(int initialCapacity,int capacityIncrement)
创建一个空向量(初始容量, 容量增量)
public Vector(int initialCapacity): Vector(initialCapacity,0)
public Vector(): 以缺省初始容量建立空向量,容量增量为0。
(2) 域
protected Object elementData[]: 存储元素的缓冲区。
protected int elementCount: 当前缓冲区中的元素个数。
protected int capacityIncrement: 当elementData用完时增加的元素
上一个:JUnit使用经验(3) -- 转自PMT杂志
下一个:Java.util----(转自网上)-(二)