addition: 有用なクラス
いつも通りこの色は美樹ちゃん
JDK には、多くのクラスライブラリが用意されています。 その中で有用なクラスを紹介します。また、ここで紹介しているクラスやメソッドはよく使われると思われる物のみ紹介しています。もっと多くのクラスやメソッドがあるので、詳細については Java のクラスのドキュメントを参照してください。
Section 1: String クラス (java.lang.String, java.lang.StringBuffer)
Java では、文字列を扱うために二つのクラスを用意しています。
- 文字列定数のための
String
クラス - 文字列の内容を変えることのできる
StringBuffer
クラス
String クラスのオブジェクトは、いったん作るとその内容を変更することはできません。それに対し、StringBuffer クラスのオブジェクトは文字データの内容の変更が行えます。
文字列生成 | ダブルクォーテーションで囲まれた文字を書くことで、その文字を値として持つ String クラスのインスタンスが得られます。 String str1 = new String("String Test"); StringBuffer str2 = new StringBuffer("String Test"); ここでは、new 演算子を使っていますがダブルクォーテーションで囲まれた文字列をそのまま指定できます。 |
文字列操作 | メソッド(一部紹介) 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 は、" +演算子 String str = "Hello " + "world"; String クラスのオブジェクト str は、" |
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 クラスです。
標準入出力 | 入出力用クラス変数
標準出力 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); |
||||||
プロパティ | システムのプロパティを得る(一部紹介) Properties props = System.getProperties(); // プロパティリスト String prop1 = System.getProperty("file.separator"); // ファイル名の区切り記号 String prop2 = System.getProperty("line.separator"); // 行の区切り記号 String prep3 = System.getProperty("path.separator"); // パスの区切り記号 |
||||||
ガベージコレクション | Java では、使われなくなったオブジェクトが占めていたメモリを解放するために、ガベージコレクタを定期的に実行します。これを、明示的に実行するには また、オブジェクトが使っていたファイルやソケットを解放する finalize メソッドを、参照されなくなったすべてのオブジェクトに対して実行するには |
Section 4: Math クラス (java.lang.Math)
算術演算を行うためのメソッドを提供するのが Mathクラスです。Mathクラスに属するメソッドは、すべて静的(static)メソッドなのでインスタンス化(オブジェクト生成)を必要としません。
種類 |
変数、メソッド |
説明 |
自然対数の底 |
|
自然対数の底 |
円周率 |
|
円周率の値 |
絶対値 |
型 abs(型 a) |
引数の値の絶対値を返す(型は int,long,float,doubleなど) |
三角関数 |
|
引数はラジアン単位で指定 |
切り上げ |
double ceil(double a) |
厳密には、単純な切り捨て切り上げではありません。詳細はドキュメントを読んでください。 |
指数 |
double
exp(double a) |
e (2.718...) の a乗を返す |
最大値 |
型 max(型 a,
型 b) |
大きい方を返す(型は 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オブジェクトを作成 指定された容量と増加量で空の Vector を作成 |
void add(int index, Object element) |
Vector 内の指定された位置に指定の要素を挿入 指定の要素を Vector の最後に追加 指定された indexに指定されたオブジェクトを要素として挿入 |
void clear() |
すべての要素を 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() |
コンストラクタ(デフォルトの初期容量(11)、負荷係数(0.75)で空のハッシュテーブルを生成) 指定された初期容量と負荷係数(0.75)での空のハッシュテーブルを生成 指定された初期容量と負荷係数で空のハッシュテーブルを生成 |
void clear() |
ハッシュテーブルを消去して、キーがない状態にする |
boolean contains(Object value) |
指定された値にマップされているキーが、ハッシュテーブルにあるかどうかを判定 指定されたオブジェクトが、ハッシュテーブルのキーかどうかを判定 ハッシュテーブル が 1 つまたは複数のキーをこの値にマッピングする場合 true を返す |
Enumeration elements() |
ハッシュテーブルにある値のリストを返す ハッシュテーブルにあるキーのリストを返す ハッシュテーブルに格納されている値の Collection ビューを返す |
Object get(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 をがんばって使っていきます!
ふむふむ、がんばれ!わからないところはメールでね。それではごきげんよう!
はい〜。お疲れ様でした。