| |
|
|
|
| |
 |
コレクション(List)編 |
 |
◆コレクションとは? |
| コレクションとは複数の要素が集まったグループを表すオブジェクトのことです。 |
| ◆コレクション・フレームワークとは? |
| コレクション・フレームワークとはコレクションを表したり操作したりする統一されたアーキテクチャのことです。 |
| ◆Listインターフェースとは? |
| 順序付けられたオブジェクトの集まりを表します。重複を許可します。リスト内のどこに各要素が挿入されるかを制御することができ、ユーザーは位置(インデックス)を指定して各要素にアクセスすることができます。 |
| ◆ここでの環境 |
| OS |
Windows XP |
| J2SE SDK |
1.4.1_01 |
|
|
|
| ◆Java実行環境の構築 |
| アプリケーション編を参考にしてJava実行環境を構築してください。 |
| ◆Listインターフェース |
| ■Listインターフェースの構成 |
 |
| ■Listインターフェースの説明 |
| インターフェース |
説明 |
| List |
順序付けられたオブジェクトの集まりを表します。重複を許可します。リスト内のどこに各要素が挿入されるかを制御することができ、ユーザーは位置(インデックス)を指定して各要素にアクセスすることができます。 |
|
|
| ◆実装 |
| Listインターフェースを実装するクラスはArrayList、LinkedListがあります。 |
| クラス |
説明 |
| ArrayList |
List インタフェースのサイズ変更可能な配列の実装です。配列のサイズを操作するメソッドを提供します。 |
| LinkedList |
List インタフェースのリンクリストの実装です。リストの先端および終端にある要素を取得、削除したり、先端および終端に要素を挿入したりするメソッド
を提供します。同期化されないことを除いてVectorとほぼ同等です。 |
|
|
| ◆サンプルコード |
| ここでは要素を追加する時間、要素を削除する時間、要素を挿入する時間、インデックスによる要素の取得の時間、Iteratorによる要素の取得の時間の5つを測定するプログラムを作成します。 |
| ■ソースコード |
| HelloWorldList.java(ここからダウンロード) |
import java.util.*;
public class HelloWorldList {
public static void main(String[] args) {
try {
long start, end;
/** 追加 **/
// ArrayList
List arrayList = new ArrayList();
start = System.currentTimeMillis();
addData(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList 追加 : " + (end - start));
// LinkedList
List linkedList = new LinkedList();
start = System.currentTimeMillis();
addData(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList 追加 : " + (end - start));
/** 削除 **/
// ArrayList
start = System.currentTimeMillis();
removeData(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList 削除 : " + (end - start));
// LinkedList
start = System.currentTimeMillis();
removeData(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList 削除 : " + (end - start));
/** 挿入 **/
// ArrayList
start = System.currentTimeMillis();
insertData(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList 挿入 : " + (end - start));
// LinkedList
start = System.currentTimeMillis();
insertData(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList 挿入 : " + (end - start));
/** インデックスによる取得 **/
// ArrayList
start = System.currentTimeMillis();
indexAccess(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList インデックスによる取得 : " + (end - start));
// LinkedList
start = System.currentTimeMillis();
indexAccess(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList インデックスによる取得 : " + (end - start));
/** Iteratorによる取得 **/
// ArrayList
start = System.currentTimeMillis();
iteratorAccess(arrayList);
end = System.currentTimeMillis();
System.out.println("ArrayList Iteratorによる取得 : " + (end - start));
// LinkedList
start = System.currentTimeMillis();
iteratorAccess(linkedList);
end = System.currentTimeMillis();
System.out.println("LinkedList Iteratorによる取得 : " + (end - start));
} catch (Exception e) {
e.printStackTrace();
}
}
static void addData(List list) {
for (int i=1;i<100000;i++) {
list.add(new Integer(i));
}
}
static void removeData(List list) {
while(!list.isEmpty()) {
list.remove(0);
}
}
static void insertData(List list) {
for (int i=1;i<100000;i++) {
list.add(0 , new Integer(i));
}
}
static void indexAccess(List list) {
int size = list.size();
for (int i=0;i<size;i++) {
Integer integer = (Integer)list.get(i);
}
}
static void iteratorAccess(List list) {
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Integer integer = (Integer)iterator.next();
}
}
} |
|
|
| ■コンパイルと実行 |
| コマンドプロンプト |
| C:\JavaHello\List>javac
HelloWorldList.java
C:\JavaHello\List>java HelloWorldList
ArrayList 追加 : 63
LinkedList 追加 : 140
ArrayList 削除 : 9156
LinkedList 削除 : 16
ArrayList 挿入 : 8203
LinkedList 挿入 : 110
ArrayList インデックスによる取得 : 15
LinkedList インデックスによる取得 : 91141
ArrayList Iteratorによる取得 : 15
LinkedList Iteratorによる取得 : 15
C:\JavaHello\List>
|
|
| おおおお!遅さが際立っている処理がありますね!速さを表にすると以下のようになります。 |
| |
インデックス
アクセス |
Iterator
アクセス |
追加 |
挿入 |
削除 |
| ArrayList |
○ |
○ |
○ |
遅 |
遅 |
| LinkedList |
遅 |
○ |
○ |
○ |
○ |
|
|
■書籍
Java関連の書籍 |
|
| |
|
| |
| ツールの部屋
- Java関連の書籍 - デザインパターン - 情報交換掲示板
- HOME |
|
|