Java.util----(轉自網上)-(一)
發(fā)表時間:2024-05-14 來源:明輝站整理相關軟件相關文章人氣:
[摘要]13.1 Java.util(1) 聚集BitSet:動態(tài)可變的位向量。 Enumeration:一個接口,返回的對象枚舉了一個值的集合。 Vector:動態(tài)可變的Object向量。 Stack:在Vector中加進后進先出方法后的擴展。 Dictionary:抽象類,完成關鍵字到值的算法。 Ha...
13.1 Java.util
(1) 聚集
BitSet:動態(tài)可變的位向量。
Enumeration:一個接口,返回的對象枚舉了一個值的集合。
Vector:動態(tài)可變的Object向量。
Stack:在Vector中加進后進先出方法后的擴展。
Dictionary:抽象類,完成關鍵字到值的算法。
Hashtable:用哈希碼實現Dictionary
Properties:Hashtable擴展,其鍵和值都是String型。
(2) 設計模式
Observer/Observable:這一對接口/類使得一個對象成為Observable,做法是當在一個Observable對 象中發(fā)生某感興趣的事件時,一個或多個Observer對象被通知到。
(3) 雜項
Date: 以秒為最小計數單位的時間、日期。
Random:可產生偽隨機數序列的對象。
StringTokenizer:據界限符將字符串分解為Token。
13.2 BitSet
(1) BitSet類
大小可動態(tài)改變, 取值為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(): 返回下一個元素。若枚舉已空,則引發(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)
對字符串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()
返回串中下個標記。若無,則引發(fā)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。先用字符串創(chuàng)建一個StringBufferInputStream對象。
Vector and Stack
13.4.1 Vector: 大小可變的Object數組,存取, 加入或刪除,
(1) 構造函數
public Vector(int initialCapacity,int capacityIncrement)
創(chuàng)建一個空向量(初始容量, 容量增量)
public Vector(int initialCapacity): Vector(initialCapacity,0)
public Vector(): 以缺省初始容量建立空向量,容量增量為0。
(2) 域
protected Object elementData[]: 存儲元素的緩沖區(qū)。
protected int elementCount: 當前緩沖區(qū)中的元素個數。
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()
刪除向量中所有元素,即變?yōu)榭铡?
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()
返回向量的第一個元素,若向量為空,引發(fā)異常。
public final synchronized Object lastElement()
返回最后一個元素,若向量為空,引發(fā)異常。firstElement和lastElement這對方法能用來循環(huán)遍歷向量中的元素。
(5) 容量管理
public final int size(): 返回當前向量中元素個數。
public final boolean isEmpty(): 向量為空返回true。
public final synchronized void trimToSize()
將向量的容量置為當前它含有的元素個數, 在元素個數穩(wěn)定不變時可用它來減少向量的存儲空間。以后需要時仍可增加。
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));
}