明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Java.util----(轉(zhuǎn)自網(wǎng)上)-(一)

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