addition: 有用なクラス

JDK には、多くのクラスライブラリが用意されています。 その中で有用なクラスを紹介します。また、ここで紹介しているクラスやメソッドはよく使われると思われる物のみ紹介しています。もっと多くのクラスやメソッドがあるので、詳細については Java のクラスのドキュメントを参照してください。


Section 1: String クラス (java.lang.String, java.lang.StringBuffer)

Java では、文字列を扱うために二つのクラスを用意しています。

String クラスのオブジェクトは、いったん作るとその内容を変更することはできません。それに対し、StringBuffer クラスのオブジェクトは文字データの内容の変更が行えます。

文字列生成

ダブルクォーテーションで囲まれた文字を書くことで、その文字を値として持つ String クラスのインスタンスが得られます。

String str1       = new String("String Test");
StringBuffer str2 = new StringBuffer("String Test");

ここでは、new 演算子を使っていますがダブルクォーテーションで囲まれた文字列をそのまま指定できます。

文字列操作

メソッド(一部紹介)
文字列の長さを得るには length メソッドを使います。

String str = "Hello world";
int    len = str.length();

String クラスのオブジェクト str の長さ len が 11 となります。

StringBuffer クラスのも同じように多くのメソッドが用意されており、文字列の操作が容易に行えるようになっています。

StringBuffer str = new StringBuffer("Hello world");
str.append("!");
str.insert(6, "new ");

StringBuffer クラスのオブジェクト str は、"Hello new world!" となります。

+演算子
+演算子は、2つの String オブジェクトを連結する働きがあります。

String str = "Hello " + "world";

String クラスのオブジェクト str は、"Hello world" となります。

Section 2: ラップクラス (java.lang)

通常、数値を演算子を使って計算する場合、特に問題もなく数値を扱うことができる。しかし、文字列で表された数値を使って計算したい時には、文字列を数字に変換しなくては計算ができません。そこで Java では、文字列を数値にしたり、数値を文字列にしたりするクラスが用意されています。基本 データ型に「クラス型としての体裁を与える(ラッピングする)」クラスを「ラップクラス」といいます。

ラッパクラス 対応する基本データ型
Boolean boolean
Byte byte
Character char
Double double
Float float
Integer int
Long long
Short short

ラップクラスは、オブジェクトの持つ値を調べたり基本データタイプに変換するメソッドや、引き数のデータを調べたり別のデータタイプに変換するメソッドを持っています。

double d1 = obj.doubleValue();               // オブジェクトobj の値を double に変換します。
double d2 = 12.34;
String str = Double.toString(d2);            // str の値は "12.34"
float f = Float.valueOf(str).floatValue();   // 文字列 str を float 型の数値に変換する

Section 3: System クラス (java.lang.System)

標準入出力やプロパティをプログラムで使うためのクラスが System クラスです。

標準入出力 入出力用クラス変数
標準入力(in) 文字列を読み込むためのストリーム。通常はキーボードから入力された文字がこのストリームに入ります。
標準出力(out) プログラムの実行結果である文字列を出力するためのストリーム。通常画面への出力するための文字がこのストリームに入ります。
標準エラー出力(err)

プログラムの実行時に発生したエラーに関する文字列を出力するためのストリーム。

画面出力

System.out.print("Hello world\n");
System.out.println("Hello world");
キーボードからの入力
byte key[] = new byte[128];
System.in.read(key);
String str = new String(key, 0);
プロパティ

システムのプロパティを得る(一部紹介)
OS、ユーザー名などシステムのプロパティをプログラムから参照したい時に利用します。

Properties props = System.getProperties();           // プロパティリスト
String prop1 = System.getProperty("file.separator"); // ファイル名の区切り記号
String prop2 = System.getProperty("line.separator"); // 行の区切り記号
String prep3 = System.getProperty("path.separator"); // パスの区切り記号
ガベージコレクション

Java では、使われなくなったオブジェクトが占めていたメモリを解放するために、ガベージコレクタを定期的に実行します。これを、明示的に実行するには System.gc() を使います。

また、オブジェクトが使っていたファイルやソケットを解放する finalize メソッドを、参照されなくなったすべてのオブジェクトに対して実行するには System.runFinalization() を使います。

Section 4: Math クラス (java.lang.Math)

算術演算を行うためのメソッドを提供するのが Mathクラスです。Mathクラスに属するメソッドは、すべて静的(static)メソッドなのでインスタンス化(オブジェクト生成)を必要としません。

種類
変数、メソッド
説明
自然対数の底 double E 自然対数の底
円周率 double PI 円周率の値
絶対値 型 abs(型 a) 引数の値の絶対値を返す(型は int,long,float,doubleなど)
三角関数

double acos(double a)
double asin(double a)
double atan(double a)
double atan2(double a, double b)
double cos(double a)
double sin(double a)
double tan(double a)

引数はラジアン単位で指定
切り上げ


切り捨て
四捨五入
double ceil(double a)
long round(double a)
int round(float a)
double floor(double a)
double rint(double a)
厳密には、単純な切り捨て切り上げではありません。詳細はドキュメントを読んでください。
指数
対数
階乗
平方根
double exp(double a)
double log(double a)
double pow(double a, double b)
double sqrt(double a)
e (2.718...) の a乗を返す
a の自然対数を返す
a の b 乗の値を返す
a の平方根の値を返す
最大値
最小値
型 max(型 a, 型 b)
型 min(型 a, 型 b)
大きい方を返す(型は int,long,float,doubleなど)
小さい方を返す(型は int,long,float,doubleなど)
乱数 double random() 0.0 〜 1.0 の間の疑似乱数を返す
  double toDegrees(double angrad) ラジアンで計測した角度を、相当する度に換算
  double toRadians(double angdeg) 度で計測した角度を、相当するラジアンに換算

Section 5: Vector クラス (java.util.Vector)

このクラスは、Object クラスのインスタンスを格納できる配列です。Object クラスは、すべてのクラスの祖先(スーパークラス)なので、Vector クラスの要素にはどんなオブジェクトでも格納できます。要素ごとに、異なるクラスのインスタンスを格納してもかまいません。
また、Vector クラスのオブジェクトは、通常の配列と違いその要素の数を増やすことができます。ただし、負荷の大きい処理なので注意して利用する必要があります。
Vector クラスに入れたオブジェクトを取り出して本来のクラスのオブジェクトとして利用する場合、キャストが必要になります。

Vector aVector = new Vector(10);                        // 要素が10の Vectorオブジェクトを生成
JButton okButton = new JButton("OK");
aVector.addElement(okButton);                           // 要素の値を入れる
JButton gotOkButton = (JButton)aVector.lastElement();   // 要素を取り出す
メソッド
説明
Vector()
Vector(int initial)
Vector(int initial, int increment)
コンストラクタ
指定された要素数の空の Vectorオブジェクトを作成
指定された容量と増加量で空の Vector を作成
void add(int index, Object element)
void addElement(Object obj)
void insertElementAt(Object obj, int index)
Vector 内の指定された位置に指定の要素を挿入
指定の要素を Vector の最後に追加
指定された indexに指定されたオブジェクトを要素として挿入
void clear()
Object remove(int index)
boolean remove(Object o)
void removeAllElements()
boolean removeElement(Object obj)
void removeElementAt(int index)
すべての要素を Vector から削除
Vector 内の指定の位置にある要素を削除
Vector 内で最初に検出された指定の要素を削除
Vector からすべての要素を削除
最初に検出された (最小インデックスの) 引数の要素を削除
指定されたインデックスの要素を削除
int capacity() Vector の新しい容量を返す
boolean contains(Object elem) 指定されたオブジェクトが Vectorの要素かどうかを判定
Object elementAt(int index) 指定されたインデックスの要素を返す
Enumeration elements() 要素のリストを返す
Object get(int index) 指定された位置にある要素を返す
int indexOf(Object elem) 指定された引数と同じ内容の要素を先頭から検索
Object set(int index, Object element) 指定された位置にある要素を、指定の要素で置き換える
void setElementAt(Object obj, int index) 指定された indexの要素に、指定されたオブジェクトを設定
void setSize(int newSize) Vector のサイズを設定
int size() Vector の要素数を返す

Section 6: Stack クラス (java.util.Stack)

Stack クラスは、LIFO (Last-In-First-Out) 方式のスタックを提供するクラスです。このクラスは Vector クラスのサブクラスで、同じように Object クラスのオブジェクトを格納できます。

Stack aStack = new Stack();                          // Stackオブジェクトを生成
JButton okButton = new JButton("OK");
aStack.push(okButton);                               // 要素の値を入れる
JButton gotOkButton = (JButton)aStack.pop();         // 要素を取り出す
メソッド
説明
Stack() 空の Stack を作成
boolean empty() スタックが空かどうかを判定
Object peek() スタックの先頭にあるオブジェクトを返す
Object pop() スタックの先頭のオブジェクトを削除し、そのオブジェクトを返す
Object push(Object item) スタックの先頭にオブジェクトを入れ、そのオブジェクトを返す
int search(Object o) オブジェクトがスタックにあるか調べ、位置を返す

Section 7: Hashtable クラス (java.util.Hashtable)

Hashtable クラスは、「キー」と「値」のセットを複数持ったハッシュテーブルを実装するためのものです。null オブジェクト以外であれば、どのオブジェクトでもキーや値に使用することができます。連想配列を実現するために、この hashtable クラスを使用します。

Hashtable aHash = new Hashtable();               // Hashtableオブジェクトを生成
aHash.put("Name", "Shin");                       // 要素を代入
String name = (String)aHash.get("Name");         // データを取り出す
クラス
役割
Hashtable()
Hashtable(int initial)
Hashtable(int initial, float  factor)
コンストラクタ(デフォルトの初期容量(11)、負荷係数(0.75)で空のハッシュテーブルを生成)
指定された初期容量と負荷係数(0.75)での空のハッシュテーブルを生成
指定された初期容量と負荷係数で空のハッシュテーブルを生成
void clear() ハッシュテーブルを消去して、キーがない状態にする

boolean contains(Object value)
boolean containsKey(Object key)
boolean containsValue(Object value)

指定された値にマップされているキーが、ハッシュテーブルにあるかどうかを判定
指定されたオブジェクトが、ハッシュテーブルのキーかどうかを判定
ハッシュテーブルが 1 つまたは複数のキーをこの値にマッピングする場合 true を返す
Enumeration elements()
Enumeration keys()
Collection values()
ハッシュテーブルにある値のリストを返す
ハッシュテーブルにあるキーのリストを返す
ハッシュテーブルに格納されている値の Collection ビューを返す

Object get(Object key)
Object put(Object key, Object value)
Object remove(Object key)

指定されたキーにマップされている、ハッシュテーブルの値を返す
ハッシュテーブルにおいて、指定された key を、指定された value にマップ
キー (およびそれに対応する値) をハッシュテーブルから削除
int size() ハッシュテーブルにあるキーの数を返す

Section 8: コレクションフレームワーク(JDK 1.2)

コレクションフレームワークは、複数のオブジェクトを表現したり操作したりするための統一されたアーキテクチャです。Vector, Hashtableは古くから用意されているクラスで、 スレッドセーフではあるが処理が遅くデータ構造変更の負荷の高いクラスでした。そこで、JDK 1.2 からはより汎用化の進んだ新しいコレクションクラスが用意されました。

JDK 1.0 JDK 1.2
Vector Object クラスのインスタンスを格納できる配列
Vector objVect = new Vector();
ArrayList/LinkedList サイズが拡張可能な配列型データ構造を持つ
List objArray = new ArrayList();
Hashtable 「キー」と「値」のセットを複数持つオブジェクト
Hashtable objHash = new Hashtable();
HashMap/TreeMap 「キー」と「値」の対になる要素を持つオブジェクト
HashMap objMap = new HashMap();
Enumeration   Iterator コレクションフレームワークに格納されたオブジェクトの集まりを順番にアクセスする仕組み

コレクションフレームワーク の中で最もよく使われる Map/List クラスを比較して紹介します。

  オブジェクトのオーダー 要素の取得方法 用 途
ArrayList 追加した順番でオブジェクトを取り出すことが可能。 要素を「添え字」から取得。要素をダイレクトに取り出せるため高速。 リストの要素の更新処理をしないような場合に有効。
LinkedList 各要素の前後にリンク情報を持たせることにより順番を管理。 要素を「添え字」から取得。要素を最初(もしくは最後)から探索して取り出すため取得に時間がかかる。 リストを頻繁に更新する必要がある場合に有効。
HashMap 順番を管理しないため、追加した順番でオブジェクトを取り出すことが不可。
要素を「キー」から取得。オブジェクト内のデータを高速に取り出せる。 キーから関連付けられたデータを高速に取得する場合に有効。
TreeMap 並び順を自由に定義してオブジェクトを取り出すことが可能。
要素を「キー」から取得。HashMapに比べ取り出す時間がかかるが、データ量が多くなるにつれて取り出す時間の増加率は小さくなるため大量のデータを扱うのに有効。 キーでデータを関連付け、かつ順序を管理したい場合に有効。

Section 9: その他のクラス

いくつかクラスを紹介してきましたが、JDK にはこのほかにも多くのクラスが用意されています。ストリームやネットワークなどを扱うクラスはよく使うかもしれませんが、紹介するとなると専門のページになってしまうのでここではあえて省略しています。また機会があれば紹介していきたいと思います。

クラス
役割
java.io 入出力ストリームを扱う
java.net ネットワークを扱う
Date, Calendar 日付や時間などを扱う
Swing, AWT GUI を扱う
Applet Web ブラウザで Java を扱う

ふう〜、こんな感じで完結したけどよかったかな?
長い間ご苦労様でした。(いつも通りこの色は美樹ちゃん)
ずいぶん省略したとこもあるのでわからないところも多いかもしれないけど何かに役立ってくれれば...
とりあえず、これから Java をがんばって使っていきます!
ふむふむ、がんばれ!わからないところはメールでね。それではごきげんよう!
は〜い。お疲れ様でした。

[Prev] [Next]