はじめに
Javaには、オブジェクトの集まりを扱うためのCollection
インターフェースを実装したクラスが用意されています。このようなコレクションクラスは20個以上あり、それぞれパフォーマンスと編成プロパティが異なります。
この記事では、これらのクラスから特定の用途に最適なものを選択する方法を説明します。
コレクションクラス
Javaのjava.util.Collection
インターフェースは、クラスによって実装され、オブジェクトの集まりを包含したり管理したりするために使われます。JavaにはCollection
インターフェースを実装する具象クラスが20個以上あります。実際のパフォーマンスやオブジェクトの編成方法はクラスによって異なり、中には特殊な用途のためのものもあります。それぞれのクラスの機能をよく知らないと、どんな用途にどのクラスを使うべきなのか判断するのが難しいかもしれません。
表1はJava 1.6が提供する具象クラスの一覧表です。
パッケージ | クラス |
java.beans.beancontext | BeanContextServicesSupport |
BeanContextSupport | |
java.util | ArrayDeque |
ArrayList | |
EnumSet | |
HashSet | |
LinkedHashSet | |
LinkedList | |
PriorityQueue | |
Stack | |
TreeSet | |
Vector | |
java.util.concurrent | ArrayBlockingQueue |
ConcurrentLinkedQueue | |
ConcurrentSkipListSet | |
CopyOnWriteArrayList | |
CopyOnWriteArraySet | |
DelayQueue | |
LinkedBlockingDeque | |
LinkedBlockingQueue | |
PriorityBlockingQueue | |
SynchronousQueue | |
javax.management | AttributeList |
javax.management.relation | RoleList |
RoleUnresolvedList | |
javax.print.attribute.standard | JobStateReasons |
java.util
パッケージとjava.util.concurrent
パッケージのクラスは汎用的なものであり、さまざまな用途に使われます。それ以外のパッケージのクラスは非常に特殊化されており、それぞれのパッケージの他のクラスと共に特定の用途にだけ使われます。
java.beans.beancontext
パッケージのクラスはJavaBeans開発のためにbeanコンテキストをサポートします。javax.management
パッケージとjavax.management.relation
パッケージのクラスはプログラムのためにリモート管理インターフェースをサポートする管理beanです。javax.print.attribute.standard
パッケージのクラスは印刷ジョブの現在の状態を記述しやすくするためにそのパッケージで使われます。
従って、実際には20個の汎用クラスの使い分けを検討すればよいことになります。これらのクラスを分類する最も有用な方法は、オブジェクトの編成方法と各種処理のパフォーマンスに注目することです。大抵の場合は、オブジェクトがどのように編成されているかの方が、オブジェクトの追加、検索、または削除がどれだけ素早く行えるかという点よりも重要になります。そういうわけで、まずは各クラスでのオブジェクトの編成方法について見ていくことにします。