Java.util----(轉(zhuǎn)自網(wǎng)上)-(一)
發(fā)表時(shí)間:2024-02-11 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]13.1 Java.util(1) 聚集BitSet:動(dòng)態(tài)可變的位向量。 Enumeration:一個(gè)接口,返回的對(duì)象枚舉了一個(gè)值的集合。 Vector:動(dòng)態(tài)可變的Object向量。 Stack:在Vector中加進(jìn)后進(jìn)先出方法后的擴(kuò)展。 Dictionary:抽象類,完成關(guān)鍵字到值的算法。 Ha...
13.1 Java.util
(1) 聚集
BitSet:動(dòng)態(tài)可變的位向量。
Enumeration:一個(gè)接口,返回的對(duì)象枚舉了一個(gè)值的集合。
Vector:動(dòng)態(tài)可變的Object向量。
Stack:在Vector中加進(jìn)后進(jìn)先出方法后的擴(kuò)展。
Dictionary:抽象類,完成關(guān)鍵字到值的算法。
Hashtable:用哈希碼實(shí)現(xiàn)Dictionary
Properties:Hashtable擴(kuò)展,其鍵和值都是String型。
(2) 設(shè)計(jì)模式
Observer/Observable:這一對(duì)接口/類使得一個(gè)對(duì)象成為Observable,做法是當(dāng)在一個(gè)Observable對(duì) 象中發(fā)生某感興趣的事件時(shí),一個(gè)或多個(gè)Observer對(duì)象被通知到。
(3) 雜項(xiàng)
Date: 以秒為最小計(jì)數(shù)單位的時(shí)間、日期。
Random:可產(chǎn)生偽隨機(jī)數(shù)序列的對(duì)象。
StringTokenizer:據(jù)界限符將字符串分解為Token。
13.2 BitSet
(1) BitSet類
大小可動(dòng)態(tài)改變, 取值為true或false的位集合。用于表示一組布爾標(biāo)志。
存儲(chǔ)的大小只要保證能索引。超出有效范圍就認(rèn)為fasle。
(2) 構(gòu)造函數(shù): BitSet() or BitSet(int nbits)
(3) 方法
public void set(int pos): 位置pos的字位設(shè)置為true。
public void clear(int pos): 位置pos的字位設(shè)置為false。
public boolean get(int pos): 返回位置是pos的字位值。
public void and(BitSet other): other同該字位集進(jìn)行與操作,結(jié)果作為該字位集的新值。
public void or(BitSet other): other同該字位集進(jìn)行或操作,結(jié)果作為該字位集的新值。
public void xor(BitSet other): other同該字位集進(jìn)行異或操作,結(jié)果作為該字位集的新值。
public int size(): 在不增加集合容量前提下,返回可被設(shè)置或清除的最高的字位序號(hào)。
public int hashCode(): 返回該集合Hash 碼, 這個(gè)碼同集合中的字位值有關(guān)。
public boolean equals(Object other): 如果other中的字位同集合中的字位相同,返回true。
(4) 例1:標(biāo)明一個(gè)字符串中用了哪些字符
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:篩選法求素?cái)?shù)
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(): 返回下一個(gè)元素。若枚舉已空,則引發(fā)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)
對(duì)字符串str構(gòu)作一個(gè)StringTokenizer, delim中字符作界限符。returnTokens是將界限符作為標(biāo)記返回還是跳過,若作為標(biāo)記返回,則每個(gè)界限符單獨(dú)返回。
public StringTokenizer(String str,String delim)
等效與StringTokenizer(str,delim,false),即界限符不返回。
public StringTokenizer(String str)
等效于StringTokenizer(str," \t\n\r"),即空格符作為界限符。
(2) Methods
public boolean hasMoreTokens(): 若還有標(biāo)記,返回true。
public String nextToken()
返回串中下個(gè)標(biāo)記。若無,則引發(fā)NoSuchElementException.
public String nextToken(String delim)
將界限符集改為delim中字符并返回下個(gè)標(biāo)記。注意沒有只設(shè)新的界限集而不返回下一個(gè)標(biāo)記的方法。
public int countTokens()
以當(dāng)前界限集進(jìn)行分解時(shí)字符串中還剩下的標(biāo)記數(shù)。
(3) 例1: 用空格和逗號(hào)來分隔字符串:
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);
}
}
}
若要功能更強(qiáng)的機(jī)制來分解字符串, 可用StreamTokenizer。先用字符串創(chuàng)建一個(gè)StringBufferInputStream對(duì)象。
Vector and Stack
13.4.1 Vector: 大小可變的Object數(shù)組,存取, 加入或刪除,
(1) 構(gòu)造函數(shù)
public Vector(int initialCapacity,int capacityIncrement)
創(chuàng)建一個(gè)空向量(初始容量, 容量增量)
public Vector(int initialCapacity): Vector(initialCapacity,0)
public Vector(): 以缺省初始容量建立空向量,容量增量為0。
(2) 域
protected Object elementData[]: 存儲(chǔ)元素的緩沖區(qū)。
protected int elementCount: 當(dāng)前緩沖區(qū)中的元素個(gè)數(shù)。
protected int capacityIncrement:當(dāng)elementData用完時(shí)增加的元素個(gè)數(shù),為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, 調(diào)用removeElementAt,or 返回false。
public final synchronized void removeAllElements()
刪除向量中所有元素,即變?yōu)榭铡?
Example
import java.util.Vector;
public class Polygon{ // 存儲(chǔ)多邊形頂點(diǎn)的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) 檢測(cè)
查找方法都用到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第一次出現(xiàn)的序號(hào)。若不存在返回-1。
public finalint indexOf(Object obj): =indexOf(obj,0)。
public final synchronized int lastIndexOf(Object obj ,int index)
反向搜索,返回obj第一次出現(xiàn)序號(hào)。若不存在,返回-1。
public final int lastIndexOf(Object obj): =lastIndexOf(obj , 0)。
public final synchronized void copyInfo(Object[] anArray)
將向量中的元素拷貝到指定的數(shù)組中
public final synchronized Enumeration element()
返回當(dāng)前元素表的Enumeration。
public final synchronized Object firstElement()
返回向量的第一個(gè)元素,若向量為空,引發(fā)異常。
public final synchronized Object lastElement()
返回最后一個(gè)元素,若向量為空,引發(fā)異常。firstElement和lastElement這對(duì)方法能用來循環(huán)遍歷向量中的元素。
(5) 容量管理
public final int size(): 返回當(dāng)前向量中元素個(gè)數(shù)。
public final boolean isEmpty(): 向量為空返回true。
public final synchronized void trimToSize()
將向量的容量置為當(dāng)前它含有的元素個(gè)數(shù), 在元素個(gè)數(shù)穩(wěn)定不變時(shí)可用它來減少向量的存儲(chǔ)空間。以后需要時(shí)仍可增加。
public final synchronized void setSize(int newSize)
將向量的大小置為newSize,若為減少,則尾上超過的部分被丟棄,若增加則新元素置null。
public final int capacity()
返回當(dāng)前容量。即不增加新元素時(shí), 能容納的元素個(gè)數(shù)。
pub final synchronized void ensureCapacity(int minCapacity): 在需增加容量時(shí),保證至少minCapacity。
(6) 例子:使Polygon能包含另一個(gè)多邊形的頂點(diǎn)的方法
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));
}