明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Java.util----(轉自網上)-(一)

[摘要]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));