パッケージ java.util
は,種々のユーティリティクラス及びインタフェースを含む。
ユーティリティの中で特徴的なものには,インタフェース
Enumeration
がある。このインタフェースを実装したオブジェクトは,項目の列を生成し,必要に応じて一つずつ項目を渡す。Dictionary
及び Vector
などのコンテナクラスは Enumeration
を返す一つ以上のメソッドを提供する。
BitSet
は,非負整数を表現するのに使用可能なビットのインデクス付きの集まりを含む。
クラス Date
は,日時情報を表現し操作するのに便利な方法を提供する。日時情報は,年,月,日,時,分及び秒によって構成でき,これら六つの要素は,曜日とともに日時情報から取り出すことができる。時間帯及び夏時間も適切に考慮する。
抽象クラスの Dictionary
は,索引キーと値との対の集まりであり,索引キーを与えて値を取り出せる。クラス
Hashtable
は,Dictionary
の一つの具体的な実装とする。クラス Properties
は,Hashtable
の拡張とし,あるテーブルが他のテーブルにデフォルト値を与えることを可能にし,ファイルからのエントリの読出し及びファイルへのエントリの書出しの標準的手段を提供する。
クラス Observable
は,オブジェクト Observable
が変化するときに,“観測者”と呼ぶ他のオブジェクトに通知する機構を提供する。観測者オブジェクトは,インタフェース
Observer
を実装する任意のオブジェクトあってよい。(この通知機構は,クラス
Object
(20.1)のメソッド
wait
及びメソッド notify
が提供するものとは違い,スレッドスケジューリング機構とは結び付いていない。)
クラス Random
は,種々のプリミティブ型の数値を種々の分散で疑似乱数的に発生する手法の拡張集合を提供する。クラス
Random
のインスタンスは,独立した疑似乱数発生器とする。
StringTokenizer
は,列を分けてトークンとする簡単な方法を提供する。トークンを区切る文字の集合は,設定可能とする。トークン切り出しメソッドは,クラス
java.io.StreamTokenizer
で使用されているメソッドよりもはるかに簡単なものを用いている。例えば
StringTokenizer
は,識別子,数及び引用文字列を区別せず,注釈の認識及びスキップを行わない。
クラス Vector
及び Stack
は,Java配列を拡張する単純なコンテナクラスとする。Vector
は,Java配列とは違って,そのサイズを変えることができ,追加,削除及び項目の検索などをするために多くの便利なメソッドを提供する。Stack
は,push
及び pop
などの付加的な操作をもつ
Vector
とする。
パッケージ java.util
で定義するクラス階層を次に示す。(ここで名前が太字で示されるクラスがパッケージ
java.util
内に存在する。それ以外はパッケージ
java.lang
に存在し,サブクラス関係を明確にするために示す。)
Object20.1
interfaceEnumeration 21.1
BitSet 21.2
Date 21.3
Dictionary 21.4
Hashtable 21.5
Properties 21.6
Observable 21.7
interfaceObserver 21.8
Random 21.9
StringTokenizer 21.10
Vector 21.11
Stack 21.12
Throwable20.22 Exception RuntimeException
EmptyStackException 21.13
NoSuchElementException 21.14
java.util.Enumeration
Enumeration
を実装するオブジェクトは,1度に一つの要素列を生成する。メソッド
nextElement
を繰り返し呼び出すことによって,列中の各要素を順次返す。
public interfaceEnumeration
{ public booleanhasMoreElements
(); public ObjectnextElement
() throws NoSuchElementException; }
21.1.1 public boolean
hasMoreElements
()
列挙(enumeration)オブジェクトが,少なくとももう一つの提供する要素をもつときに限って,結果を
true
とする。
21.1.2 public Object
nextElement
()
throws NoSuchElementException
列挙オブジェクトが,少なくとももう一つの提供する要素をもつならば,その要素を返す。それ以外の場合には,NoSuchElementException
が投げられる。
ハッシュテーブル ht
内のすべてのキー及びキーの長さを表示するコード例を次に示す。メソッド
keys
は,すべてのキーを配布する列挙を返す。この例では,キーを文字列とした場合を示す。
Enumeration e = ht.keys(); while (e.hasMoreElements()) { String key = (String)e.nextElement(); System.out.println(key + " " + key.length()); }
java.util.BitSet
BitSet
は,必要に応じて拡張されるビットの集合とする。BitSet
のビットは非負整数によってインデクス付けする。各ビットは各々,チェック,設定又は解除を可能とする。一つの
BitSet
のAND,OR及びXORの各演算によって,もう一つ
BitSet
の内容を修正する。
public final classBitSet
implements Cloneable { publicBitSet
(); publicBitSet
(int nbits); public StringtoString
(); public booleanequals
(Object obj) public inthashCode
(); public Objectclone
(); public booleanget
(int bitIndex); public voidset
(int bitIndex); public voidclear
(int bitIndex); public voidand
(BitSet set); public voidor
(BitSet set); public voidxor
(BitSet set); public intsize
(); }
21.2.1 public
BitSet
()
このコンストラクタは,新たに生成した BitSet
を初期化し,すべてのビットをクリアする。
21.2.2 public
BitSet
(int nbits)
このコンストラクタは,新たに生成した BitSet
を初期化し,すべてのビットをクリアする。0
から
nbits-1
までの範囲のインデクスで,明示的にビットを表現するために十分な領域を確保する。
21.2.3 public String
toString
()
BitSet
の設定状態にあるビットをもつインデクスすべてに対して,そのインデクスの10進表現を結果に含む。インデクスは小さな値から並ぶものとし,",
"(コンマ及びスペース)で区切り,波括弧で囲む。その結果,整数集合の通常の数学記法を返す。
このメソッドは,Object
(20.1.2)の
メソッド toString
を置き換える。
BitSet drPepper = new BitSet();
ここで,drPepper.toString()
は "{}"
を返す。
drPepper.set(2);
ここで,drPepper.toString()
は "{2}"
を返す。
drPepper.set(4); drPepper.set(10);ここで,
drPepper.toString()
は "{2, 4, 10}"
を返す。
21.2.4 public boolean
equals
(Object obj)
引数が null
でなく,すべての非負 int
インデクス
k
に対し次の条件を満たす,オブジェクト BitSet
であるときに限って,結果を true
とする。
((BitSet)obj).get(k) == this.get(k)このメソッドは,
Object
(20.1.3)のメソッド equals
を置き換える。21.2.5 public int
hashCode
()
ハッシュコードは,どのビットが BitSet
内で設定されていたかだけに依存する。この計算に使用するアルゴリムを次に示す。
BitSet
内のビットを,例えば bits
と呼ぶ
long
整数の配列内に記録する。ただし,次の表現が正しいときに限り,
BitSet
内のビット k
(k
の値は非負)を設定する。
((k>>6) < bits.length) && ((bits[k>>6] & (1L << (bit & 0x3F))) != 0)このとき,次のメソッド
hashCode
の定義を実際のアルゴリズムの正しい実装とする。
public synchronized int hashCode() { long h = 1234; for (int i = bits.length; --i >= 0; ) { h ^= bits[i] * (i + 1); } return (int)((h >> 32) ^ h); }ビットの集合が変化すればハッシュコード値が変化することに注意。
このメソッドは,Object
(20.1.4)のメソッド hashCode
を置き換える。
21.2.6 public Object
clone
()
BitSet
のクローニングは,その BitSet
に等しい新しい BitSet
を生成する。
このメソッドは,Object
(20.1.5)のメソッド clone
を置き換える。
21.2.7 public boolean
get
(int bitIndex)
インデクス bitIndex
をもつビットが,現在この
BitSet
に設定されているならば,結果を true
とする。それ以外の場合には,false
とする。
bitIndex
が負ならば,IndexOutOfBoundsException
が投げられる。
21.2.8 public void
set
(int bitIndex)
BitSet
内のインデクス bitIndex
のビットを“セット”(true
)状態に変える。
bitIndex
が負ならば,IndexOutOfBoundsException
が投げられる。
bitIndex
がメソッド size
(21.2.13)が返す値よりも小さくないならば,この
BitSet
のサイズを bitIndex
よりも大きくする。
21.2.9 public void
clear
(int bitIndex)
BitSet
内のインデクス bitIndex
のビットを“クリア”(false
)状態に変える。
bitIndex
が負ならば,IndexOutOfBoundsException
が投げられる。
bitIndex
が,メソッド size
(21.2.13)が返す値よりも小さくないならば,この
BitSet
のサイズを bitIndex
よりも大きくする。
21.2.10 public void
and
(BitSet set)
いくつかのビットをクリアすることによって BitSet
を修正できる。すべての非負 int
インデクス k
に対し,set
のビット k
をクリアしているならば,BitSet
のビット k
をクリアする。
21.2.11 public void
or
(BitSet set)
いくつかのビットを設定することによって BitSet
を修正できる。すべての非負 int
インデクス k
に対し,set
のビット k
が設定されているならば,BitSet
のビット k
を設定する。
21.2.12 public void
xor
(BitSet set)
いくつかのビットを反転することによって BitSet
を修正できる。すべての非負 int
インデクス k
に対し,set
のビット k
が設定されているならば,BitSet
のビット k
を反転する。
21.2.13 public int
size
()
このメソッドは,ビット値の表現のためにこの BitSet
が実際に使用する領域のビット数を返す。
java.util.Date
Date
は,システム独立な抽象表現の日時情報をミリ秒の精度で提供する。日時情報は,年,月,日(何月何日の日),時,分及び秒で構成する。この6個の要素と曜日を取り出せる。日時情報は比較可能とし,可読文字列に変換可能とする。
public class例:Date
{ publicDate
(); publicDate
(long time); publicDate
(int year, int month, int date); publicDate
(int year, int month, int date, int hours, int minutes); publicDate
(int year, int month, int date, int hours, int minutes, int seconds); publicDate
(String s) throws IllegalArgumentException; public StringtoString
(); public booleanequals
(Object obj); public inthashCode
(); public intgetYear
(); public voidsetYear
(int year); public intgetMonth
(); public voidsetMonth
(int month); public intgetDate
(); public voidsetDate
(int date); public intgetDay
(); public intgetHours
(); public voidsetHours
(int hours); public intgetMinutes
(); public voidsetMinutes
(int minutes); public intgetSeconds
(); public voidsetSeconds
(int seconds); public longgetTime
(); public voidsetTime
(long time); public booleanbefore
(Date when); public booleanafter
(Date when); public StringtoLocaleString
(); public StringtoGMTString
(); public intgetTimezoneOffset
(); public static longUTC
(int year, int month, int date, int hours, int minutes, int seconds); public static longparse
(String s) throws IllegalArgumentException; }
Date
は協定世界時UTC(Coordinated Universal
Time)を反映するが,Javaシステムのホスト環境に依存し,必ずしも正確でなくともよい。最近のほとんどすべてのオペレーティングシステムは,いかなる場合でも,1日
== 86400 s
としている。しかしUTCでは,約1年又は2年に1度,“うるう秒”と言う余分な1秒が存在する。うるう秒は,常に1日の,それも殆んど常に12月31日又は6月30日の,最後の1秒に付け加える。例えば,1995年の最後の1分は,うるう秒を付け加えて61秒とした。
ほとんどの現在のコンピュータクロックは,うるう秒の違いを反映できるほど十分には正確ではない。世界時
UT(Universal Time)と等価なグリニッチ平均時 GMT(Greenwich Mean
Time)によって定義されるコンピュータ規格も存在する。その規格では,“通俗な”名前を
GMT,“科学的な”名前を UT としている。UTC 及び UT
の違いは,原子時計に基づくものを UTC とし,天文観測に基づくものを UT
とする。実用目的ではその差はほとんどない。地球の回転は一様ではなく,複雑な方法で遅く又は速くなるので,UT
は常に一様には流れていない。うるう秒は,ある修正を施した UT の版であるUT1の
0.9 秒内に UTC を収めるために必要で導入した。
参考 これ以外の日時システムも存在する。例えば,GPS(the satellite-based Global Positioning System)で使用する時間スケールは,UTC と同期するが,うるう秒の調整はない。これ以外の興味深い情報には,“the U. S. Naval Observatory”,特に次のWWWサイトからアクセス可能な“the Directorate of Time”がある。
http://tycho.usno.navy.mil次のWWWサイトからアクセス可能な“Systems of Time”の定義も興味深い。
http://tycho.usno.navy.mil/systime.html
年,月,日(何月何日の日)時,分及び秒の値を受け取るクラス又は返すクラス
Date
のすべてのメソッドは,次の表現を使用する。
21.3.1 public
Date
()
このコンストラクタは,新しく生成したオブジェクト Date
を初期化し,ミリ秒単位で測って生成時刻に最も近い瞬間を表現する。
21.3.2 public
Date
(long time)
このコンストラクタは,新しく生成したオブジェクト Date
を初期化し,“エポック”として知られる基準時刻,つまり,グリニッチ平均時1970年1月1日00:00:00,から
time
ms 後の時刻の瞬間を表現する。クラス System
のメソッド currentTimeMillis
(20.18.6)も参照のこと。
21.3.3 public
Date
(int year, int month, int date)
このコンストラクタは,新しく生成したオブジェクト Date
を初期化し,地域時間帯における year
引数,month
引数及び date
引数によって指定する日の午前零時を表現する。これは,次のコンストラクタ呼び出しと同じ効果をもつ。
(21.3.5)
Date(year, month, date, 0, 0, 0)
21.3.4 public
Date
(int year, int month, int date,
int hours, int minutes)
このコンストラクタは,新しく生成したオブジェクト Date
を初期化し,地域時間帯における
year
,month
,date
,hours
及び minutes
の引数によって指定する分の最初の瞬間を表現する。これは,次のコンストラクタ呼び出しと同じ効果をもつ。
(21.3.5)
Date(year, month, date, hours, minutes, 0)
21.3.5 public
Date
(int year, int month, int date, int hours, int minutes, int seconds)
このコンストラクタは,新しく生成したオブジェクト Date
を初期化し,year
,month
,date
,hours
,minutes
及び seconds
の引数によって指定する地域時間帯における秒の最初の瞬間を表現する。
21.3.6 public
Date
(String s)
throws
IllegalArgumentException
このコンストラクタは,新しく生成したオブジェクト Date
を初期化し,文字列 sによって指定する日時をメソッド parse
(21.3.31)を使ったかのように解釈して,その日時を表現する。
21.3.7 public String
toString
()
オブジェクト Date
を,次の形式の String
に変換する。
"dow mon dd hh:mm:ss zzz yyyy"ここで,各表現は次のとおりとする。
dow
は,曜日(Sun
,
Mon
,Tue
, Wed
, Thu
,
Fri
,Sat
)とする。
mon
は,月(Jan
,
Feb
,Mar
, Apr
,
May
,Jun
,Jul
,Aug
,Sep
,
Oct
,Nov
, Dec
)とする。
dd
は,2桁の10進数の日付(01
から
31
まで)とする。
hh
は,2桁の10進数の時(00
から
23
まで)とする。
mm
は,2桁の10進数の分(00
から
59
まで)とする。
ss
は,2桁の10進数の秒(00
から
61
まで)とする。
zzz
は,(夏時間も考慮した)時間帯とする。標準時間帯の短縮形は,メソッド
parse
(21.3.31)
によって認識するものを含む。時間帯情報が使用可能でないならば,zzz
は空欄,つまり,いかなる文字も存在しないものとする。
yyyy
は,4桁の10進数の年とする。
toLocaleString
(21.3.27)及び toGMTString
(21.3.28)も参照のこと。
このメソッドは,Object
(20.1.2)の
メソッド toString
を置き換える。
21.3.8 public boolean
equals
(Object obj)
引数が null
でなく,このメソッドをもつオブジェクト
Date
とミリ秒まで同じ時刻のオブジェクト Date
であるときに限り,結果を true
とする。このように,二つのオブジェクト Date
は,メソッド
getTime
(21.3.23)で両方が同じ long
値を返すときに限り,等しいとする。
このメソッドは,Object
(20.1.3)
のメソッド equals
を置き換える。
21.3.9 public int
hashCode
()
結果は,メソッド getTime
(21.3.23)
が返す long
値を32ビットづつ半分にした二つの値のXORとする。つまり,ハッシュコードは次の式の値とする。
(int)(this.getTime()^(this.getTime()>>>32))このメソッドは,
Object
(20.1.4)のメソッド hashCode
を置き換える。21.3.10 public int
getYear
()
返却値は,地域時間帯におけるオブジェクト Date
が表現する時刻の瞬間を含む年,又はその時刻の瞬間で始まる年から1900を引いた値とする。
21.3.11 public void
setYear
(int year)
オブジェクト Date
を修正して,地域時間帯における,指定した年の,変更前と同じ月,日,時,分及び秒の時刻を表現する。(もちろん,例えば日付が2月29日で年がうるう年でないならば,新しい日付は3月1日として処理する。)
21.3.12 public int
getMonth
()
返却値は,地域時間帯におけるオブジェクト Date
が表現する時刻の瞬間を含む月,又はその時刻の瞬間で始まる月を表現する数字(0
から 11
まで)とする。
21.3.13
public void
setMonth
(int month)
オブジェクト Date
を修正して,地域時間帯における,指定した月の,変更前と同じ年,日,時,分及び秒の時刻を表現する。例えば日付を10月31日とし月を6月と設定したならば,6月は30日だけなので,新しい日付は7月1日として処理する。
21.3.14 public int
getDate
()
返却値は,地域時間帯におけるオブジェクト Date
が表現する時刻の瞬間を含む月の日付,又はその時刻の瞬間で始まる月の日付を表現する数字(1
から 31
まで)とする。
21.3.15 public void
setDate
(int date)
オブジェクト Date
を修正して,地域時間帯における,指定した日の,変更前と同じ年,月,時,分及び秒の時刻を表現する。例えば日付が4月30日で,しかも日を31に設定したならば,4月は30日だけなので,新しい日付は5月1日として処理する。
21.3.16 public int
getDay
()
返却値(0
= 日曜日,1
= 月曜日,2
=
火曜日,3
= 水曜日,4
= 木曜日,5
=
金曜日,6
= 土曜日)は,地域時間帯におけるオブジェクト
Date
が表現する時刻の瞬間を含む曜日の表現,又はその時刻の瞬間で始まる曜日の表現とする。
21.3.17 public int
getHours
()
返却値は,地域時間帯におけるオブジェクト Date
が表現する時刻の瞬間を含む日の時,又はその時刻の瞬間で始まる日の時を表現する数字(0
から 23
まで)とする。
21.3.18 public void
setHours
(int hours)
オブジェクト Date
を修正して,地域時間帯における,指定した時の,変更前と同じ年,月,日,分及び秒の時刻を表現する。
21.3.19 public int
getMinutes
()
返却値は,地域時間帯におけるオブジェクト Date
が表現する時刻の瞬間を含む時の分,又はその時刻の瞬間で始まる時の分を表現する数字(0
から 59
まで)とする。
21.3.20 public void
setMinutes
(int minutes)
オブジェクト Date
を修正して,地域時間帯における,指定した分の,変更前と同じ年,月,日,時及び秒の時刻を表現する。
21.3.21 public int
getSeconds
()
返却値は,地域時間帯におけるオブジェクト Date
が表現する時刻の瞬間を含む分の秒,又はその時刻の瞬間で始まる分の秒を表現する数字(0
から 61
まで)とする。
21.3.22 public void
setSeconds
(int seconds)
オブジェクト Date
を修正して,地域時間帯における,指定した秒の,変更前と同じ年,月,日,時及び分の時刻を表現する。
21.3.23 public long
getTime
()
このメソッドは,特定の時点(グリニッチ平均時1970年1月1日00:00:00)から
Date
のもっている時刻までの,ミリ秒で測った差の時間を返す。
21.3.24 public void
setTime
(long time)
オブジェクト Date
を修正して,特定の時点(グリニッチ平均時1970年1月1日 00:00:00)から
time
ミリ秒経た時刻を表現する。
21.3.25 public boolean
before
(Date when)
オブジェクト Date
が表現する時刻の瞬間が,when
が表現する時刻の瞬間よりも厳密に時間的に前のときに限り,結果を
true
とする。
21.3.26 public boolean
after
(Date when)
オブジェクト Date
が表現する時刻の瞬間が when
が表現する時刻の瞬間よりも厳密に時間的に後のときに限り,結果を
true
とする。
21.3.27 public String
toLocaleString
()
オブジェクト Date
を実装に依存した形式の String
に変換する。Java
アプリケーションの動作中には,利用者に馴染みのある形式に変換されるものとする。ISO
C言語の strftime
関数がサポートする %c
形式と比較可能とする。
メソッド toString
(21.3.7)及び toGMTString
(21.3.28)も参照のこと。
21.3.28 public String
toGMTString
()
オブジェクト Date
を,次の長さ23又は24の String
に変換する。
"d mon yyyy hh:mm:ss GMT"ここで,各表現は次のとおりとする。
1
から 31
まで)とする。
Jan
,Feb
,Mar
,Apr
,May
,Jun
,Jul
,Aug
,Sep
,Oct
,Nov
,Dec
)とする。
00
から 23
まで)とする。
00
から 59
まで)とする。
00
から 61
まで)とする。
GMT
”とする。
メソッド toString
(21.3.7)及び toLocaleString
(21.3.27)も参照のこと。
21.3.29 public int
getTimezoneOffset
()
このメソッドは,オブジェクト Date
が表現する時刻に対応する,UTC
と地域時間帯との分単位で測った差を返す。
例えば,マサチューセッツはグリニッチから5時間だけ西のため,次のとおりとする。
new Date(96, 2, 14).getTimezoneOffset() は 300を返す1996年2月14日には標準時間(東部標準時間)を使用しているため,このとおりとする。この標準時間は UTC から5時間ずれている。しかし,
new Date(96, 5, 1).getTimezoneOffset() を 240 を返す1996年5月1日には夏時間(東部夏時間)を使用しているため,このとおりとする。この夏時間は UTC と4時間しかずれていない。 このメソッドは次の計算をしたものと同じ結果を与える。
(this.getTime() - UTC(this.getYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds())) / (60 * 1000)
21.3.30 public static long
UTC
(int year, int month, int date,
int hours, int minutes, int seconds)
6個の引数(21.3.5)をもった
Date
コンストラクタと同様に,年,月,日,時,分及び秒として引数を解釈するが,地域時間帯ではなく
UTC として解釈する。指定した時刻を,特定の時点(グリニッチ平均時
1970年1月1日 00:00:00)からミリ秒単位で測った差を表現し返す。
21.3.31 public static long
parse
(String s)
throws
IllegalArgumentException
文字列 s
を日時情報として解釈する。解釈が成功した場合には,特定の時点(グリニッチ平均時
1970年1月1日
00:00:00)からミリ秒単位で測った差を返す。解釈が失敗した場合には,IllegalArgumentException
が投げられる。
文字列 s
は,関心のあるデータを探しながら,左から右へと処理される。
s
内にある ASCII文字の丸括弧 (
及び )
内は無視する。それ以外の s
内で許される文字は,次の ASCII
文字及び空白類(20.5.19)だけとする。
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789,+-:/
+
又は -
が存在し,しかも年が既に分かっていれば,その数字は時間帯のオフセットを表す。その数字が24よりも小さければ,時間単位で測ったオフセットとする。24以上の場合には,分単位で測ったオフセットと見なし,区切りなしの24時間形式で表現する。+
が先行する場合には東向きのオフセットを,-
が先行する場合には西向きのオフセットを意味する。時間帯オフセットは常に
UTC(グリニッチ)を基準とする。そこで例えば,文字列に -5
が現れれば,“グリニッチの5時間だけ西”を意味し,+0430
ならば“グリニッチの4時間30分だけ東”を意味する。実質上意味はないが,GMT
,UT
又は UTC
を文字列に記述してもよい。例えば,GMT-5
又は utc+0430
などとなる。
0
から 11
までの範囲にするために,1
だけ引き算する)。ただし,既に月が分かっている場合には,日と見なす。
AM
と一致する単語は,無視する(ただし,時が分からなかった場合,又は時にあたる数字が
1
より小さいか 12
より大きい場合には,構文解析は失敗する)。
PM
と一致する単語が存在した場合には,既に分かっている時に12を加える(ただし,時が分からなかった場合,又は時にあたる数字が
1
より小さいか 12
より大きい場合には,構文解析は失敗する)。
SUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
又は SATURDAY
の任意の接頭辞と一致する単語は,無視する。例えば,sat
,Friday
,TUE
及び Thurs
は無視する。
JANUARY
,FEBRUARY
,
MARCH
,APRIL
,MAY
,JUNE
,JULY
,AUGUST
,SEPTEMBER
,OCTOBER
,NOVEMBER
又は DECEMBER
の任意の接頭辞と一致する単語は,ここで与えられた順番で,月を記述していると見なし,数字(0
から 11
まで)に変換する。例えば,aug
,Sept
,april
及び NOV
は,月として認識する。Ma
も月と認識するが,順番から MARCH
として認識し MAY
とは見なさない。
GMT
,UT
又は
UTC
と一致する単語は UTC として参照し処理する。
EST
,CST
,MST
又は PST
と一致する単語は,それぞれグリニッチから5時間,6時間,7時間又は8時間だけ西の北アメリカ時間帯を参照すると認識する。大文字・小文字を区別せずに,EDT
,CDT
,MDT
又は PDT
と一致する単語は,それぞれ前述の時間帯の夏時間の場合を参照すると認識する。(将来的には,この方法は他の時間帯を認識するよう改訂されるかも知れない。)
s
を検査したら,次の二つのいずれかの方法で時刻に変換する。時間帯又は時間帯オフセットを認識したら,年,月,日,時,分及び秒は
UTC (21.3.30)で解釈し,時間帯オフセットを適用する。それ以外の場合には,年,月,日,時,分及び秒は地域時間帯で解釈する。
java.util.Dictionary
Dictionary
は,キー(keys) を要素
(elements)
に関連づけるオブジェクトとする。すべてのキー及び要素はオブジェクトとする。どの一つの
Dictionary
においても,すべてのキーは多くとも一つの要素と関連付けられる。Dictionary
及びキーを与えれば,対応する要素を探すことができる。
public abstract classDictionary
{ abstract public intsize
(); abstract public booleanisEmpty
(); abstract public Objectget
(Object key) throws NullPointerException; abstract public Objectput
(Object key, Object element) throws NullPointerException; abstract public Objectremove
(Object key) throws NullPointerException; abstract public Enumerationkeys
(); abstract public Enumerationelements
(); }
equals
(20.1.3)
Dictionary
21.4.1 abstract public int
size
()
メソッド size
は,この辞書内のエントリ(相異なるキー)の数を返す。
21.4.2 abstract public boolean
isEmpty
()
メソッド isEmpty
は,この辞書が一つもエントリをもっていないときに限り,true
を返す。
21.4.3 abstract public Object
get
(Object key)
throws
NullPointerException
メソッド get
は,この辞書が指定した key
に対するエントリを含めば,関連する要素を返す。それ以外の場合には,null
を返す。
key
が null
ならば,NullPointerException
が投げられる。
21.4.4 abstract public Object
put
(Object key, Object element)
throws
NullPointerException
辞書が指定した key
のエントリを既に含んでいれば,そのエントリを新しい element
を含むように修正し,辞書中の key
に対応する以前の要素を返す。
辞書が指定した key
のエントリを含まなければ,その
key
及び element
のためのエントリを作成し,null
を返す。
key
又は element
が null
ならば,NullPointerException
が投げられる。
21.4.5 abstract public Object
remove
(Object key)
throws
NullPointerException
メソッド remove
は,辞書から一つのエントリを取り除く。
辞書が指定した key
のエントリを含めば,エントリを辞書から取り除き,その後に key
に対応した要素を返す。
辞書が指定した key
に対応するエントリを含まなければ,null
を返す。
key
が null
ならば,NullPointerException
が投げられる。
21.4.6 abstract public
Enumeration
keys
()
メソッド keys
は,辞書が含むエントリに対するすべての
key
を生成する Enumeration
(21.1)を返す。
21.4.7 abstract public
Enumeration
elements
()
メソッド elements
は,辞書内のエントリに含まれるすべての要素を生成する
Enumeration
(21.1)を返す。
java.util.Hashtable
Hashtable
は,抽象クラス Dictionary
(21.4)の実装とし,いくつかの機能を追加する。
public classHashtable
extends Dictionary implements Cloneable { publicHashtable
(int initialCapacity, float loadFactor); publicHashtable
(int initialCapacity); publicHashtable
(); public StringtoString
(); public Objectclone
(); public intsize
(); public booleanisEmpty
(); public Objectget
(Object key) throws NullPointerException; public Objectput
(Object key, Object value) throws NullPointerException; public Objectremove
(Object key) throws NullPointerException; public Enumerationkeys
(); public Enumerationelements
(); public booleancontains
(Object value); public booleancontainsKey
(Object key); protected voidrehash
(); public voidclear
(); }
Hashtable
は効率に影響を与える二つのパラメータ,容量(capacity) 及び
負荷係数(load factor) をもつ。負荷係数は,0.0
から
1.0
までの間にあることが望ましい。ハッシュ表のエントリ数が負荷係数及び現在の容量の積を超えたとき,ハッシュ表の容量をメソッド
rehash
を使って増加する。負荷係数が大きいほど,1度の参照にかかる予想時間は大きくなるが,メモリの効率的使用を可能とする。多くのエントリを
Hashtable
に作成する必要があれば,十分な容量を取って表を作成しておくことによって,表を大きくするのに必要となる自動再ハッシュの実行を表に任せるよりも効率的にエントリを挿入することが可能となる。
21.5.1 public
Hashtable
(int initialCapacity, float
loadFactor)
このコンストラクタは,新たに生成したオブジェクト Hashtable
を初期化し,容量を initialCapacity
とし,負荷係数を
loadFactor
とする。最初は,ハッシュ表にエントリは存在しない。
21.5.2 public
Hashtable
(int initialCapacity)
このコンストラクタは,新たに生成したオブジェクト Hashtable
を初期化し,容量を initialCapacity
とし,負荷係数を
0.75
とする。最初は,ハッシュ表にエントリは存在しない。
21.5.3 public
Hashtable
()
このコンストラクタは,新たに生成したオブジェクト Hashtable
を初期化し,負荷係数を 0.75
とする。最初は,ハッシュ表にエントリは存在しない。
21.5.4 public String
toString
()
クラス Hashtable
は,波括弧で囲まれ,ASCII 文字“,
”(コンマと空白)で区切られたエントリ集合としての文字列形式で表現する。各々のエントリは,キー,等号及び関連する要素として表現する。メソッド
toString
は,キー及び要素を文字列に変換するために使用する。
このメソッドは,Object
のメソッド toString
(21.2.3)を置き換える。
21.5.5 public Object
clone
()
Hashtable
のコピーを作成し,返す。ハッシュ表のすべての構造そのものをコピーし,キー及び要素はコピーされない。
このメソッドは,Object
のメソッド clone
(21.2.6)を置き換える。
21.5.6 public int
size
()
クラス Dictionary
のメソッド size
(21.4.1)を実装する。
21.5.7 public boolean
isEmpty
()
クラス Dictionary
のメソッド isEmpty
(21.4.2)を実装する。
21.5.8 public Object
get
(Object key)
クラス Dictionary
のメソッド get
(21.4.3)を実装する。
21.5.9 public Object
put
(Object key, Object value)
クラス Dictionary
のメソッド put
(21.4.4)を実装する。
21.5.10 public Object
remove
(Object key)
クラス Dictionary
のメソッド remove
(21.4.5)を実装する。
21.5.11 public Enumeration
keys
()
クラス Dictionary
のメソッド keys
(21.4.6)を実装する。
21.5.12 public Enumeration
elements
()
クラス Dictionary
のメソッド elements
(21.4.7)を実装する。
21.5.13 public boolean
contains
(Object value)
この Hashtable
が,メソッド equals
(20.1.3)によって,その要素が
value
と等しいと判定される少なくとも一つのエントリを含むときに限り,結果を
true
とする。
21.5.14 public boolean
containsKey
(Object key)
Hashtable
が,メソッド equals
(20.1.3)によって,キーを key
と等しいと判定するエントリを含むときに限り,結果を true
とする。つまり,このメソッドは,次の式と同じ結果を返すものとする。
get(key) != null
21.5.15 protected void
rehash
()
Hashtable
がエントリに適応し,より効果的にアクセスを行なうために,容量の増加及び内部構造の再構成を行うものとする。
21.5.16 public void
clear
()
メソッド clear
は,すべてのエントリをこの
Hashtable
から取り除く。
java.util.Properties
Properties
表は,二つの機能拡張をもち,キー及び要素を文字列とするという制約をもつ,Hashtable
の一種とする。まず,入力ストリームからエントリを表に読み込むメソッドが存在し,表内のすべてのエントリを出力ストリームへ書き出すためのメソッドが存在する。次に,Properties
表は,デフォルト値を提供する他の Properties
表を参照してもよい。メソッド getProperty
は,メソッド
get
(21.4.3)とよく似ているが,あるエントリが表中に見つからない場合,デフォルト表を探す(そのデフォルト表そのものは,他のデフォルト表を参照してよく,順次再帰的に参照してもよい)。
public classProperties
extends Hashtable { protected Propertiesdefaults
; publicProperties
(); publicProperties
(Properties defaults); public StringgetProperty
(String key); public StringgetProperty
(String key, String defaultValue); public EnumerationpropertyNames
(); public voidload
(InputStream in) throws IOException; public voidsave
(OutputStream out, String header); public voidlist
(PrintStream out); }
21.6.1 protected Properties
defaults
;
defaults
フィールドが null
でなければ,この
Properties
表に対してデフォルト値を提供するのは他の
Properties
表とする。
21.6.2 public
Properties
()
このコンストラクタは,新しく生成する Properties
表を初期化し,デフォルト表をもたない。最初は新しく生成した表には,エントリが存在しないものとする。
21.6.3 public
Properties
(Properties defaults)
このコンストラクタは,新しく生成する Properties
を初期化し,デフォルト表を defaults
とする。引数
defaults
は null
であってもよい。この場合には,新しく生成した Properties
表はデフォルト表をもたない。最初は新しく生成した表には,エントリが存在しない。
21.6.4 public String
getProperty
(String key)
Properties
表内にキーとして key
をもつエントリが存在すれば,それに関連する要素を返す。それ以外の場合には,この
Properties
表がデフォルト表をもてば,そのデフォルト表のメソッド
getProperty
が返す値を返す。それ以外の場合には
null
を返す。
21.6.5 public String
getProperty
(String key,
String
defaultValue)
Properties
表の中に key
に対応するエントリが存在すれば,対応する要素を返す。それ以外の場合には,この
Properties
表がデフォルト表をもてば,メソッド
getProperty
の返却値を返す。それ以外の場合には,defaultValue
を返す。
21.6.6 public Enumeration
propertyNames
()
この Properties
表が関連する要素を提供できるすべてのキーを生成する
Enumeration
(21.1)を返す。この
Properties
が,デフォルト表(21.6.1)をもてば,デフォルト表がもつエントリのキーも
Enumeration
が提供し,さらにデフォルト表が他のデフォルト表をもつ場合にも再帰的になっているものとする。ただし,いかなるキーも1度以上
Enumeration
が提供することはない。
21.6.7 public void
load
(InputStream in) throws IOException
属性(キーと要素との対)を入力ストリームから次のように読み込み,この
Properties
表に追加する。
Runtime.getRuntime().getLocalizedInputStream(in)
Runtime
のメソッド getLocalizedInputStream
(20.16.15)を参照のこと。
すべての属性は,入力ストリームの一行を占める。各行は,行終端記号で区切られる(\n
,\r
又は
\r\n
)。入力ストリームからの行は,その入力ストリーム上でファイルの最後に到達するまで処理される。
空白類(20.5.19)
だけを含む行,又は最初の非空白類がASCIIの #
若しくは
!
とする行は,無視する(つまり,#
又は
!
は注釈行を示す)。
空行又は注釈行を除くすべての行は,表に加える一つの属性を記述する(ただし,行が
\
で終っている場合は,次に示すとおりその行の次の行を連続行として扱う)。キーは,最初の非空白類から最初のASCII文字の
21.6.8
この
ヘッダ引数が
次に,ASCII
さらにこの 21.6.9
この
この通知機構はスレッド(20.20)の処理とは何の関係もなく,クラス
二つの観測者はメソッド 21.7.1
観測者 21.7.2
観測者 21.7.3
すべての観測者をこのオブジェクト 21.7.4
このオブジェクト 21.7.5
オブジェクト 21.7.6
オブジェクト 21.7.7
このオブジェクト 21.7.8
このオブジェクト 21.7.9
このオブジェクト 21.8.1
オブジェクト
クラス 21.9.1
擬似乱数発生器の状態を保持するために,メソッド 21.9.2
次にメソッド 21.9.3
メソッド 21.9.4
このコンストラクタは,新しく生成する 21.9.5
このコンストラクタは,新しく生成した作られた 21.9.6
メソッド
21.9.7
クラス
21.9.8
メソッド
21.9.9
メソッド
21.9.10
メソッド
21.9.11
public double nextDouble() {
return (((long)next(26) << 27) + next(27))
/ (double)(1L << 53);
}
21.9.12
メソッド
21.10.1
このコンストラクタは,新しく生成した 21.10.2
このコンストラクタは,新しく生成した 21.10.3
このコンストラクタは,新しく生成した 21.10.4
現在位置より先の列内に少なくとも一つのトークンが存在するときに限り,結果を
21.10.5
現在位置より先の列内の次のトークンを返す。現在位置は,認識されたトークンを越えて次に進む。
21.10.6
最初に, 21.10.7
このメソッドは, 21.10.8
これは, 21.10.9
現在の区切り文字の集合を使い,現在位置より先の列内のトークン数を返す。現在位置は進めない。
21.11.1
内部的に, 21.11.2
このフィールドは,オブジェクト 21.11.3
メソッド 21.11.4
このコンストラクタは,新しく生成した 21.11.5
このコンストラクタは,新しく生成した 21.11.6
このコンストラクタは,新しく生成した 21.11.7
この
21.11.8
このメソッドは, 21.11.9
21.11.10
特定の
21.11.11
21.11.12
21.11.13
21.11.14
21.11.15
21.11.16
21.11.17
21.11.18
21.11.19 21.11.20
21.11.21
21.11.22
21.11.23
21.11.24
21.11.25
21.11.26
21.11.27
21.11.28
21.11.29
21.11.30
21.12.1
21.12.2
スタックが空ならば, 21.12.3
スタックが空ならば, 21.12.4
スタックがいかなる項目も含まないときに限り,結果を 21.12.5
オブジェクト
21.13.1
このコンストラクタは,新しく生成した 21.14.1
このコンストラクタは,新しく生成した 21.14.2
このコンストラクタは,新しく生成した
=
,:
又は空白類の直前までの行中のすべての文字によって構成する。キーの後の空白類は,スキップする。キーの後の最初の非空白類が
=
又は :
ならば,この文字は無視し,その後の任意の空白類もスキップする。その行の残りすべての文字が,関連する要素列の一部となる。要素列中(ただし,キーではない)のASCIIエスケープ列
\t
,\n
,\r
,\\
,\"
,\'
,\
(バックスラッシュ及びスペース)及び
\u
xxxx
は認識し,一つの文字に変換する。さらに,行の最後の文字が \
である場合,次の行は現在の行の続きとする。\
及び行終端記后w)
f$!
OC1$K"Truth"
を,関連する要素として "Beauty"
を表す。
Truth Beauty
Truth = Beauty
Truth:Beauty
Truth :Beauty
次の3行は一つの属性を表す。
fruits apple, banana, pear, \
cantaloupe, watermelon, \
kiwi, mango
キーを "fruit"
とし,関連する要素を次のとおりとする。
"apple, banana, pear, cantaloupe, watermelon, kiwi, mango"
各々の \
の前に一つのスペースが出現し,最終的な結果には各コンマの後に一つの空白が出現する点に注意すること。\
記号,行終端記号及び行頭の空白類は単に捨て,一つ又はそれ以上の他の文字に置き換わることは
ない(not)。
cheeses
キーを "cheeses"
とし,関連する要素は空文字列とする。
public void
save
(OutputStream out, String header)Properties
表のすべての属性(キー及び要素の対)を次の出力ストリームへ書き出す。
Runtime.getRuntime().getLocalizedOutputStream(out)
その際の出力形式は Properties
表にメソッド load
(21.6.7)を使って,読み込むのに適した形式とする。Runtime
のメソッド getLocalizedOutputStream
(20.16.16)を参照のこと。
Properties
表の,デフォルト表からの属性はこのメソッドでは書き出さ ない(not)
ものとする。null
でなければ,最初にASCII#
文字,ヘッダの文字列及び改行を出力ストリームに書き出す。このように
header
は特定の注釈として利用できる。#
文字,(現在時刻を Date
のメソッド
toString
(21.3.7)により生成したかのような)現在の日付と時刻及び改行からなる注釈行を常に書き出す。Properties
表のすべてのエントリを1行ずつ書き出す。各々のエントリに対してキー文字列を書き,ASCII=
文字を書き,さらに関連する要素文字列を書く。要素文字列の各々の文字をエスケープシーケンスとして記述すべきかどうか調べる。ASCII\
文字,タブ,改行,復帰は,各々\\
,\t
,\n
,\r
と書く。\u0020
より小さい文字及び \u007E
より大きい文字は,(局所化された出力ストリームの必要性に依存して)\u
xxxx
として書く。ただし,xxxx
は適切な16進値とする。途中及び行末の空白ではなく,行頭の空白文字は,前に
\
を付けて書き出す。
public void
list
(PrintStream out)Properties
表の属性(キー及び要素の対)を,メソッド
save
の出力よりもデバグで便利となるように,幾分省略した形で出力ストリーム
out
へ書き出す。ヘッダは書き出さず,40文字より長い要素値は最初の37文字に切り捨て,"...
"を付け加える。これにより,キーの名前がそれほど長くなければ,各々の属性を物理的な出力装置の1行の領域に合わせる可能性が生ずる。
21.7 クラス
クラス java.util.Observable
Observable
の各インスタンスはすべて,オブジェクト
Observable
に重要な変化があった場合にはいつも通知を受ける“観測者”と呼ぶ集合を保持している。観測者は,インタフェース
Observer
(21.8)を実装する任意のオブジェクトであってよい。
Object
(20.1)の
wait
及び notify
の機構とは完全に異なることに注意すること。
public class
観測可能なオブジェクトを新しく生成するとき,その観測者の集合は空とする。
Observable
{
public void addObserver
(Observer o);
public void deletteObserver
(Observe o);
public void deleteObservers
();
public int countObservers
();
public void notifyObservers
();
public void notifyObservers
(Object arg);
protected void setChanged
();
protected void clearChanged
();
public boolean hasChanged
();
}
equals
(20.1.3)が true
を返すときに限り,同じとみなす。
public void
addObserver
(Observer o)o
が,このオブジェクト Observable
の観測者の集合内に既に存在している観測者と同じでないならば,その集合に追加する。
public void
deleteObserver
(Observer o)o
をこのオブジェクト Observable
の観測者集合から取り除く。
public void
deleteObservers
()Observable
の観測者集合から取り除く。
public int
countObservers
()Observable
の観測者集合内の観測者数を返す。
public void
notifyObservers
()Observable
が変化したとマークされたら,このメソッドは第2の(?)の引数を
null
としてすべての観測者に通知する。つまり,このメソッドは次と同じとする。
notifyObservers(null)
public void
notifyObservers
(Object arg)Observable
が変化したとマークされた (21.7.9)ら,このメソッドは第2の引数を
arg
としてすべての観測者に通知する。二つの引数,このオブジェクト
Observable
及び arg
,をもった観測者のメソッド
update
(21.8.1)を呼び出すことによって観測者は通知を受ける。このとき,このオブジェクトのマークは消去される(21.7.8)。
protected void
setChanged
()Observable
が変化したとしてマークを付ける。メソッド hasChanged
は
true
を返す。
protected void
clearChanged
()Observable
は変化していないとしてマークをつける。メソッド hasChanged
は
false
を返す。
public boolean
hasChanged
()Observable
に対して,メソッド
clearChanged
又はメソッド notifyObservers
より後にメソッド setChanged
が呼ばれたときに限り
true
を返す。
21.8 インタフェース
あるクラスがオブジェクト java.util.Observer
Observable
が変化したときに通知されるためには,インタフェース Observer
を実装することが望ましい。オブジェクト Observer
がどのように通知されるかについては,クラス Observable
(21.7)を参照のこと。
public interface
Observer
{
public void update
(Observable o, Object arg);
}
public void
update
(Observable o, Object arg)Observable
が変化したとき及びそのメソッド
notifyObservers
(21.7.6)が呼び出されるとき,observers
の集合内のすべてのオブジェクト Observer
は,二つの引数オブジェクト Observable
及びメソッド
notifyObservers
への呼び出しにより指定された引数を渡し,メソッド update
を起動することで通知される。
21.9 クラス
クラス java.util.Random
Random
の各インスタンスは,別々の独立な,互いに無関係のプリミティブ型の値の疑似乱数発生器とする。
public class
二つのオブジェクト Random
{
protected long seed
;
protected double nextNextGaussian
;
protected boolean haveNextNextGaussian
= false;
public Random
();
public Random
(long seed);
public void setSeed
(long seed);
protected int next
(int bits);
public int nextInt
();
public long nextLong
();
public float nextFloat
();
public double nextDouble
();
public double nextGaussian
();
}
Random
が同じ生成源(seed)で生成され,しかも各々に対して一連の同じメソッド呼出しがなされたならば,すべてのJava実装において同じ数字の列を生成しそれを返す。この性質を保証するため,
クラス Random
に対して特別のアルゴリズムを規定する。Javaコードの完全な移植性を実現するために,Java実装はクラス
Random
に対して,以下に示すすべてのアルゴリズムを使用しなければならない。しかし,クラス
Random
のサブクラスは,すべてのメソッドに対する一般的な規則を守る範囲内で他のアルゴリズムを使うことが許される。
Random
が実装するアルゴリズムは、protected
な三つの状態変数を使用する。アルゴリズムはまた,各起動に関して,32個までの擬似乱数的に発生したビットに提供する
protected
なユーティリティメソッドを使用する。
protected long
seed
;next
(21.9.7)で使用する変数。
protected double
nextNextGaussian
;nextGaussian
(21.9.12)が呼び出されたときに配布する,あらかじめ計算された値を保持するために使用する変数。
protected boolean
haveNextNextGaussian
= false;nextGaussian
(21.9.12)で配布する次の値をあらかじめ計算し,かつ捨て去ったかを追跡するために使用する変数。
public
Random
()Random
発生器を初期化し,現在時刻(20.18.6)を生成源とする。
public Random() {
this(System.currentTimeMillis()); }
public
Random
(long seed)Random
発生器を初期化し,引数 seed
を生成源とする。
public Random(long seed) { setSeed(seed); }
public void
setSeed
(long seed)setSeed
が従わなければならない一般規則は,次のとおりとする。つまり,乱数発生器オブジェクトの状態を変更し,引数
seed
を生成源とし,直前に生成したものと全く同じ状態にする。
setSeed
はクラス Random
で次のように実装する。
synchronized public void setSeed(long seed) {
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
haveNextNextGaussian = false;
}
クラス Random
による setSeed
の実装は,偶然に与えられた生成源の48ビットしか使用しない。しかし,通常は,置き換わるメソッドは,生成源値としてlong引数の64ビットすべてを使用してもよい。
protected int
next
(int bits)next
が従わなければならない一般規則は,次のとおりとする。つまり,int
の値を返し,引数ビットが 1
以上 32
以下ならば,返却値の下位ビットの多くは(近似的に)独立に選択されたビット値とし,(近似的に)等しい確率で
0
又は 1
とする。
Random
によって,メソッド next
を次のとおりに実装する。
synchronized protected int next(int bits) {
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >>> (48 - bits));
}
これは線形合同法による疑似乱数発生器で,D. H. Lehmerにより定義され,Donald
E. Knuth により The Art of Computer Programming の第2巻
Seminumerical Algorithms の 3.2.1.で記述されている。
public int
nextInt
()nextInt
が従わなければまらない一般規則は,次のとおりとする。つまり,一つの
int
値を疑似乱数的に発生し返す。すべての個の可能な int
値を(近似的に)等確率で生成する。
setSeed
をクラス Random
によって,次のとおりに実装する。
public int nextInt() { return next(32); }
public long
nextLong
()nextInt
が従わなければならない一般規則は,次のとおりとする。つまり,一つの
long
値を疑似乱数的に発生し返す。すべての個の可能な long
値を(近似的に)等確率で生成する。
setSeed
をクラス Random
によって,次のとおりに実装する。public long nextLong() {
return ((long)next(32) << 32) + next(32);
}
public float
nextFloat
()nextFloat
が従わなければならない一般規則は,次のとおりとする。つまり,0.0f
以上 1.0f
未満の範囲から(近似的に)一様に選択される一つの
float
値を疑似乱数的に発生し返す。すべての個の形式の可能な float
値を(近似的に)等確立で生成する。ここで,m はより小さい正の整数とする。
setSeed
をクラス Random
によって,次のとおりに実装する。public float nextFloat() {
return next(24) / ((float)(1 << 24));
}
メソッド next
は,独立に選択されたビットの近似的に偏りのない発生源であるために,“近似的に”という予防的表現を前述の記述に使用する。完全な発生源又は完全に乱数的に選択されたビットが存在するならば,示されたアルゴリズムは与えられた範囲から完全な均一性をもって
float
を選択する。
public double
nextDouble
()nextDouble
が従わなければならない一般規則は,次のとおりとする。つまり,0.0d
以上 1.0d
未満の範囲から選択される一つの double
値を疑似乱数的に発生し返す。すべての個の形式の可能な float
値を近似的に等確立で生成する。ただし,m はより小さい正の整数とする。
メソッド
メソッド setSeed
をクラス Random
によって,次のとおりに実装する。
next
は,独立に選択された近似的にビット偏りのない発生源であるために,“近似的に”という予防的表現を前述の記述に使用する。完全な発生源及び完全に乱数的なに選択されたビットが存在するならば,示されたアルゴリズムは与えられた範囲から完全な均一性をもって
double
値を選択する。
public double
nextGaussian
()nextGaussian
が従わなければならない一般規則は,次のとおりとする。つまり,近似的に,平均
0.0
,標準偏差 1.0
の通常の正規分布から選択された一つの double
値を疑似乱数的に発生し返す。
setSeed
をクラス Random
によって,次のとおりに実装する。
synchronized public double nextGaussian() {
if (haveNextNextGaussian) {
haveNextNextGaussian = false;
return nextNextGaussian;
} else {
double v1, v2, s;
do {
v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0
v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0
s = v1 * v1 + v2 * v2;
} while (s >= 1);
double norm = Math.sqrt(-2 * Math.log(s)/s);
nextNextGaussian = v2 * norm;
haveNextNextGaussian = true;
return v1 * norm;
}
}
ここでは,G.E.P.Box,M.E.Muller及びG.Marsagliaの極手法(polar
method)を使用しており,The Art of Computer Programming,
2巻:Seminumerical Algorithms, 3.4.1, 小節 C,algorithm P内に Doonald
E.Knuth によって記述されている。これは Math.log
への一回の呼び出し及び Math.sqrt
への一回の呼び出しにより二つの独立した値を生成することに注意すること。
21.10 クラス
クラス java.util.StringTokenizer
StringTokenizer
は,String
をトークンに分割する手段を提供する。このクラスにより使用されるトークン切り出しメソッドは,クラス
java.io.StreamTokenizer
により使用されるメソッドよりもはるかに単純とする。例えば,StringTokenizer
は,識別子,数及び引用列を区別しない。さらに,注釈の認識及び読み飛ばしをしない。
StringTokenizer
は, Enumeration
(21.1)として与えられる。public class
StringTokenizer
implements Enumeration {
public StringTokenizer
(String str, String delim, boolean returnTokens);
public StringTokenizer
(String str, String delim);
public StringTokenizer
(String str);
public boolean hasMoreTokens
();
public String nextToken
();
public String nextToken
(String delim);
public boolean hasMoreElements
();
public Object nextElement
();
public int countTokens
();
}
StringTokenizer
は,単に文字を区切り文字とそれ以外の文字のクラスとに分割する。トークン切出し子は,値
true
をもつ returnTokens
で生成されたか,false
をもつ returnTokens
で生成されたかに依存して,次のいずれかの動作をする。returnTokens
が false
ならば,区切り文字は,興味あるトークンを分離するためだけに使われる。この場合,トークンは,区切り文字でない連続する文字の最大列となる。returnTokens
が true
ならば,区切り文字そのものを興味あるトークンと考える。この場合,トークンは,一つの区切り文字か,区切り文字でない連続する文字の最大列かのいずれかとする。StringTokenizer
は,内部的に,トークンを切り出す
String
内の現在位置を保持する。処理された文字の先に現在位置を進める操作が存在する。StringTokenizer
を生成するために使用した文字列の部分列(20.12.32)を得ることによってトークンを返す。public
StringTokenizer
(String str, String delim,
boolean returnTokens)StringTokenizer
を初期化し,与えられた列 str
内のトークンを認識する。列
delim
内のすべての文字を区切り文字とする。引数
returnTokens
は,区切り文字そのものをトークンとするかどうかを指定する。
public
StringTokenizer
(String str, String delim)StringTokenizer
を初期化し,与えられた列 str
内のトークンを認識する。列
delim
内のすべての文字を区切り文字とする。区切り文字そのものはトークンとして取り扱われない。
public
StringTokenizer
(String str)StringTokenizer
を初期化し,与えられた列 str
内のトークンを認識する。すべての空白類(20.5.19)を区切り文字とする。区切り文字そのものはトークンとしては取り扱われない。
public boolean
hasMoreTokens
()true
とする。このメソッドが true
を返す場合,引数なしで nextToken
を呼び出すと処理が成功してトークンを返す。
public String
nextToken
()public String
nextToken
(String delim)StringTokenizer
で区切り文字と考えられている文字の集合を,列 delim
内の文字に換える。次に,現在位置より先の列内の次のトークンを返す。現在位置は,認識されたトークンを越えて次に進む。
public boolean
hasMoreElements
()hasMoreTokens
(21.10.4)と全く同じ振舞いをする。StringTokenizer
を Enumeration
(21.1)として使用可能とするために提供される。
public Object
nextElement
()nextToken
(21.10.5)と全く同じ振舞いをする。StringTokenizer
を Enumeration
(21.1)
として使用可能とするために提供する。
public int
countTokens
()21.11 クラス
java.util.Vector
Vector
は,配列と同様に,整数インデクスを使い,アクセス可能な項目を含む。しかし,Vector
生成後の項目の追加及び削除に適応し,必要に応じて,Vector
のサイズは増加又は減少する。
public class
Vector
implements Cloneable {
protected Object[] elementData
;
protected int elementCount
;
protected int capacityIncrement
;
public Vector
(int initialCapacity, int capacityIncrement);
public Vector
(int initialCapacity);
public Vector
();
public final String toString
();
public Object clone
();
public final Object elementAt
(int index)
throws IndexOutOfBoundsException
;
public final void setElementAt
(Object obj, int index)
throws IndexOutOfBoundsException
;
public final Object firstElement
()
throws NoSuchElementException;
public final Object lastElement
()
throws NoSuchElementException;
public final void addElement
(Object obj);
public final void insertElementAt
(Object obj, int index)
throws IndexOutOfBoundsException
;
public final boolean removeElement
(Object obj);
public final void removeElementAt
(int index)
throws IndexOutOfBoundsException
;
public final void removeAllElements
();
public final boolean isEmpty
();
public final int size
();
public final void setSize
(int newSize);
public final int capacity
();
public final void ensureCapacity
(int minCapacity);
public final void trimToSize
();
public final void copyInto
(Object anArray[])
throws IndexOutOfBoundsException
;
public final Enumeration elements
();
public final boolean contains
(Object elem);
public final int indexOf
(Object elem);
public final int indexOf
(Object elem, int index)
throws IndexOutOfBoundsException
;
public final int lastIndexOf
(Object elem);
public final int lastIndexOf
(Object elem, int index)
throws IndexOutOfBoundsException
;
}
protected Object[]
elementData
;Vector
は,少なくともすべての要素を含む大きさの配列内に要素を保持する。
protected int
elementCount
;Vector
の内の現在の項目数を保持する。要素 elementData[0]
から
elementData[elementCount-1]
までを実際の項目とする。
protected int
capacityIncrement
;ensureCapacity
(21.11.22)が(新しい配列を生成することで)フィールド
elementData
内のデータ配列のサイズを増加しなければならないとき,少なくとも
capacityIncrement
内の量だけサイズを増加する。しかし,capacityIncrement
が0であれば,少なくともデータ配列のサイズを2倍にする。
public
Vector
(int initialCapacity, int
capacityIncrement)Vector
を初期化し,その内部データ配列のサイズを initialCapacity
とし,標準の容量増加量を capacityIncrement
の値とする。最初,Vector
はどんな項目も含まない。
public
Vector
(int initialCapacity)Vector
を初期化し,その内部データ配列のサイズを initialCapacity
とし,標準の容量増加量を0とする。最初,Vector
はどんな項目も含まない。
public
Vector
()Vector
を初期化し,その内部データ配列のサイズを 10
とし,標準の容量増加量を0とする。最初,Vector
はどんな項目も含まない。
public final String
toString
()Vector
は,ASCII形式の角括弧で囲まれ,ASCII形式の文字",
"(コンマ及びスペース)で区切られた,項目のリストの列形式で表現する。メソッド
toString
は,項目を列に変換するために使用する。ヌル参照は,列
"null
" として表現する。
Vector v = new Vector();
v.addElement("Canberra");
v.addElement("Cancun");
v.addElement("Canandaigua");
System.out.println(v.toString());
これは次の出力を生成する。
[Canberra, Cancun, Canandaigua]
このメソッドは,Object
(20.1.2)のメソッド toString
を置き換える。public Object
clone
()Vector
のコピーを構成し,それを返す。コピーは,Vector
の内部データ配列のクローンへの参照を含み,元の内部データ配列への参照は含まない。
Object
(20.1.5)のメソッド clone
を置き換える。public final Object
elementAt
(int index)
throws
IndexOutOfBoundsException
index
が負であるか,Vector
の現在のサイズよりも大きければ,IndexOutOfBoundsException
が投げられる。public final void
setElementAt
(Object obj, int index)
throws
IndexOutOfBoundsException
index
をもった Vector
の項目を
obj
で置き換え,obj
を Vector
内の特定の index
の項目とする。
index
が負であるか,Vector
の現在のサイズよりも大きければ,IndexOutOfBoundsException
が投げられる。public final Object
firstElement
()
throws
NoSuchElementExceptionVector
が空ならば,NoSuchElementException
が投げられる。それ以外の場合には,最初の項目(インデクス 0
の項目)を返す。
public final Object
lastElement
()
throws
NoSuchElementExceptionVector
が空ならば,NoSuchElementException
が投げられる。それ以外の場合には,最後の項目(インデクス
size()-1
の項目)を返す。
public final void
addElement
(Object obj)Vector
のサイズを 1
だけ増加し,obj
を新たな最後の項目とする。
public final void
insertElementAt
(Object obj, int index)
throws
IndexOutOfBoundsException
Vector
のサイズを 1
だけ増加し,obj
を特定の index
における新しい項目とする。インデクス
k
が index
よりも大きいときに限り,以前
k
に存在した Vector
の項目は,すべて最初に
k+1
に移動する。
public final boolean
removeElement
(Object obj)Vector
が obj
の出現を含めば,メソッド
removeElementAt
(21.11.16)を使用したかのように最初の(最小のインデクスをもった)出現を削除し,true
を返す。Vector
が obj
の出現を含まなければ,Vector
を修正せず false
を返す。
public final void
removeElementAt
(int index)
throws
IndexOutOfBoundsException
Vector
のサイズを 1
だけ減少し,特定の
index
における項目を Vector
から取り除く。インデクス k
が index
よりも大きいときに限り,以前にインデクス k
に存在していた
Vector
の項目を最初にインデクス k-1
に移動する。
public final void
removeAllElements
()Vector
からすべての要素を取り除き,Vector
を空とする。
public final boolean
isEmpty
()Vector
が空であるとき,つまりそのサイズが0であるときに限り,true
を返す。
public final int
size
()public final void
setSize
(int newSize)Vector
のサイズを newSize
に変える。新しいサイズが元のサイズよりも小さいならば,項目を後ろから順に取り除き捨てる。新しいサイズが元のサイズよりも大きいならば,新しい項目に
null
を設定する。
public final int
capacity
()Vector
の現在の容量(フィールド elementData
に確保されている内部データ配列の長さ)を返す。
public final void
ensureCapacity
(int minCapacity)Vector
の現在の容量が minCapacity
よりも小さければ,フィールド elementData
(21.11.1)に確保している内部データ配列を大きい方で置き換えて,容量を増加する。新しいデータ配列のサイズは,capacityIncrement
の値が正の値ならば,元のサイズと capacityIncrement
(21.11.3)とを加えたものとする。capacityIncrement
の値が正でない場合には,新しい容量は元の容量の2倍とする。しかしこの新しいサイズが相変わらず
minCapacity
より小さい場合には,この新しい容量を
minCapacity
とする。
public final void
trimToSize
()Vector
の容量が現在の size
(21.11.19)よりも大きければ,フィールド
elementData
で確保している内部データ配列を小さい方に置き換え,容量を変えて現在のサイズに等しくする。
public final void
copyInto
(Object anArray[])
throws
IndexOutOfBoundsExceptionVector
のすべての項目を配列 anArray
にコピーする。Vector
内のインデクス k
における項目を anArray
の要素 k
にコピーする。anArray
の長さが Vector
のサイズよりも小さければ,IndexOutOfBoundsException
が投げられる。
public final Enumeration
elements
()Vector
内のすべての要素を生成する Enumeration
(21.1)を返す。生成される最初の項目をインデクス
0
の項目とし,次をインデクス 1
の項目とし,以降同様にインデクスを付ける。
public final boolean
contains
(Object elem)Vector
内の項目が,メソッド equals
(20.1.3)で決定されるelem
と同じときに限り,true
を返す。
public final int
indexOf
(Object elem)elem
に等しい項目が Vector
内に存在する場合,最初の出現のインデクス,つまり,次の式を
true
とする最小値 k
を返す。
elem.equals(elementData[k])
Vector
内にこれらの項目が出現しなければ,-1
を返す。public final int
indexOf
(Object elem, int index)
throws
IndexOutOfBoundsExceptionelem
に等しい項目が,Vector
内の位置
k
又はそれ以降に存在すれば,最初の出現のインデクス,つまり,次の式を
true
とする最小値 k
を返す。
elem.equals(elementData[k]) && (k >= index)
Vector
内にこれらの項目が出現しなければ,-1
を返す。public final int
lastIndexOf
(Object elem)elem
に等しい項目が Vector
内に存在すれば,最後の出現のインデクス,つまり,次の式を true
とする最小値 k
を返す。
elem.equals(elementData[k])
Vector
内にこれらの項目が出現しなければ,-1
を返す。public final int
lastIndexOf
(Object elem, int index)
throws
IndexOutOfBoundsExceptionelem
に等しい項目が Vector
内の位置 k
又はそれ以前に存在すれば,最後の出現のインデクス,つまり,次の式を
true
とする最大値 k
を消す。
elem.equals(elementData[k]) && (k <= index)
Vector
内にこれらの項目が存在しなければ,-1
を返す。21.12 クラス
クラス java.util.Stack
Stack
は,ベクトルをスタックとして取り扱うために5個の操作を追加して
Vector
を拡張する。通常の push
及び
pop
操作,スタック上の最上位の項目を取り出すメソッド
peek
,スタックが空かどうかを試験するメソッド
empty
並びに項目を探しスタックを調べ項目のスタック最上位からの位置を見い出すメソッド
search
を提供する。
public class
スタックを最初に作成するとき,スタックはどんな項目も含まない。
Stack
extends Vector {
public Object push
(Object item);
public Object pop
() throws EmptyStackException;
public Object peek
() throws EmptyStackException;
public boolean empty
();
public int search
(Object o);
}
public Object
push
(Object item)item
をスタックの最上位に押し込む。これは,次と全く同じ効果をもつ。
addElement(item)
Vector
(21.11.13)の
メソッド addElement
を参照すること。public Object
pop
() throws EmptyStackExceptionEmptyStackException
が投げられる。それ以外の場合には,最上位の項目(Vector
の最後の項目)を取り除き,それを返す。
public Object
peek
() throws EmptyStackExceptionEmptyStackException
が投げられる。それ以外の場合には,最上位の項目(Vector
の最後の項目)を返すが,取り除かない。
public boolean
empty
()true
とする。
public int
search
(Object o)o
が Stack
内の項目であれば,このメソッドは,スタックの最上位から最も近い出現のスタック最上位からの距離を返す。スタックの最上位を距離
1
とする。o
を Stack
内の項目と比較するために,メソッド equals
(20.1.3)を使用する。
21.13 クラス
java.util.EmptyStackException
EmptyStackException
は,空のオブジェクト Stack
に対して,pop
(21.12.2)又は peek
(21.12.3)を行なおうとしたことを示すために,投げられる
。
public class
EmptyStackException
extends RuntimeException {
public EmptyStackException
();
}
public
EmptyStackException
()EmptyStackException
を初期化し,エラーメッセージを null
とする。
21.14 クラス
java.util.NoSuchElementException
NoSuchElementException
は,それ以上供給する要素が存在しないオブジェクト Enumeration
にさらに要素を要求したことを示すために,投げられる 。インタフェース
Enumeration
(21.1.2)のメソッド
nextElement
参照。
public class
NoSuchElementException
extends RuntimeException {
public NoSuchElementException
();
public NoSuchElementException
(String s);
}
public
NoSuchElementException
()NoSuchElementException
を初期化し,エラーメッセージを null
とする。
public
NoSuchElementException
(String s)NoSuchElementException
を初期化し,後にメソッド getMessage
(20.22.3)で検索するエラーメッセージ列
s
への参照を保存する。