明辉站/网站教程/内容

Java.util----(转自网上)-(一)

网站教程2024-05-12 阅读
[摘要]13.1 Java.util(1) 聚集BitSet:动态可变的位向量。 Enumeration:一个接口,返回的对象枚举了一个值的集合。 Vector:动态可变的Object向量。 Stack:在Vector中加进后进先出方法后的扩展。 Dictionary:抽象类,完成关键字到值的算法。 Ha...
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 abstratObject 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用完时增加的元素个数,为0则每次容量增倍。
(3) 修改

public final synchronized void setElementAt(Object obj, int index): 将obj放在index处。
public final synchronized void removeElementAt(int index)
将index处的元素删去,index后元素前移,大小减1。

public final synchronized void insertElementAt(Object obj, int index) : 将obj插在index处,向量中index后元素后移。
public final synchronized void addElement(Object obj)
将obj放在向量的尾上。

public final synchronized boolean removeElement(Object obj)
先找Obj, 调用removeElementAt,or 返回false。

public final synchronized void removeAllElements()
 删除向量中所有元素,即变为空。

Example
import java.util.Vector;

 public class Polygon{ // 存储多边形顶点的Point表

 private Vector verties = new Vector();

 public void add(Point p){

 verties.addElement(p);

 }

 public void remove(Point p){

verties.removeElement(p);

 }

 public int numVerties(){

return verties.size();

 }

 // ..其它方法....

 }

(4) 检测

查找方法都用到Object.equals. 若index 无效,异常。
public finalsynchronized Object elementAt(int index)
public final boolean contains(Object obj): 在向量中返回true。
public final synchronized int indexOf(Object obj ,int index)
从index开始,返回obj第一次出现的序号。若不存在返回-1。

public finalint indexOf(Object obj): =indexOf(obj,0)。
public final synchronized int lastIndexOf(Object obj ,int index)
反向搜索,返回obj第一次出现序号。若不存在,返回-1。

public final int lastIndexOf(Object obj): =lastIndexOf(obj , 0)。
public final synchronized void copyInfo(Object[] anArray)
将向量中的元素拷贝到指定的数组中

public final synchronized Enumeration element()
返回当前元素表的Enumeration。

public final synchronized Object firstElement()
返回向量的第一个元素,若向量为空,引发异常。

public final synchronized Object lastElement()
返回最后一个元素,若向量为空,引发异常。firstElement和lastElement这对方法能用来循环遍历向量中的元素。

(5) 容量管理

public final int size(): 返回当前向量中元素个数。
public final boolean isEmpty(): 向量为空返回true。
public final synchronized void trimToSize()
将向量的容量置为当前它含有的元素个数, 在元素个数稳定不变时可用它来减少向量的存储空间。以后需要时仍可增加。

public final synchronized void setSize(int newSize)
将向量的大小置为newSize,若为减少,则尾上超过的部分被丢弃,若增加则新元素置null。

public final int capacity()
返回当前容量。即不增加新元素时, 能容纳的元素个数。

pub final synchronized void ensureCapacity(int minCapacity): 在需增加容量时,保证至少minCapacity。
(6) 例子:使Polygon能包含另一个多边形的顶点的方法

public void merge(Polygon other){

 int otherSize = other.vertices.size();

vertices.ensureCapacity(vertices.size()+otherSize);

for(int i=0;i<otherSize;i++)

vertices.addElement(other.vertices.elementAt(i));

……

相关阅读