2. ListとIterator2.1. java.util.List, java.util.ArrayList, java.util.LinkedListJava2 SDK1.2からコレクションクラスは「Java コレクション・フレームワーク」(JCF)として大幅に見直されました。機能をインタフェースとして定義し直し、その機能の実装を各クラスに委ねると言う形式になっています。したがって各クラスではどのインタフェースを実装しているかで、どのような機能を持っているか把握する事もできます。 コレクション・フレームワークでは上記のような見直しに伴い、これまでの「Vector」「Hashtable」も見直す事になりました。「Vector」の代わりに導入されたのが「java.util.ArrayList」と「java.util.LinkedList」です。これらは「java.util.List」インタフェースを実装するクラスで、順序付けられた可変個の値を保持する事ができます。「Vector」も互換性のために残されていますが(「List」インタフェースも実装している)、これからは「ArrayList」か「LinkedList」を使用するのが良いでしょう。 「List」インタフェースは「追加」「挿入」「削除」「検索」「ランダムアクセス」のメソッドを定義しています。従って「ArrayList」「LinkedList」はそれらのメソッドを実装している事になります。以下は主要なメソッドの一覧です。
以下は「add」「get」メソッドの使用例です。「Vector」の時と同じく、「get」の返り値は「Object」ですのでキャストする必要があります。
List list=new ArrayList();
list.add("japan");
list.add("china");
String country=(String)list.get(1);
「toArray」メソッドには引数無しのタイプのものもありますが、確実にプログラムを動作させるためには引数があるタイプのものを使用するのが適当です。以下はその使用例です。 String[] countries=(String[])list.toArray(new String[list.size()]); 最後に「ArrayList」と「LinkedList」の違いを説明します。この2つの違いは内部実装方法の違いで、「ArrayList」は配列として実現しているのに対し「LinkedList」はリスト構造を用いて実現しています。そのため両者は処理によって動作速度が以下のように異なります。アプリケーションの性質によって使い分けると良いでしょう。
(実習課題1)「ArrayList」と「LinkedList」の性能を比較するプログラムを作成しなさい。
|
![]()
![]()
|