JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > コレクション(List)編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  2003/05/10  田中宏和
コレクション(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