jp.ne.ytp.util.tree
クラス MultiKeyTree

java.lang.Object
  |
  +--jp.ne.ytp.util.tree.MultiKeyTree

public class MultiKeyTree
extends Object

複数のキーを持つことが可能な二分探索木のクラスです。 当クラスを利用する場合、TreeActionListener インタフェースを実装したクラスが必要になります。
このクラスが管理するのは各階層のキーを持つノードと、 TreeActionListenerに対する呼び出しのタイミングだけです。 各ノードが管理するデータオブジェクトとそれに対する処理 (例えば、金額の集計やファイルソート、あるいは画面表示や帳票出力など)は、 TreeActionListenerを実装したクラスで行って下さい。 当クラスではそのような処理は一切提供しませんが、 この形態により、機能と実装の分離が可能となっています。
特にキーのマッチングに使う場合、 キーが一致した時の処理をTreeActionListener.match(int, Object)メソッドに記述し、 データを出力する処理をTreeActionListener.sort(Object[], int, Object)メソッドに記述すると、 効率よく実装することが可能になります。 マッチング処理の場合、TreeActionListener.makeHeader(Object, int, Object)TreeActionListener.makeFooter(Object, int, Object)の実装は不要です。
1階層分の情報を取得するkeys(Object[])values(Object[]) メソッドを利用する場合には、 OneLayerListenerインタフェースを実装したクラスが必要になります。

【作者注】当クラスの実装は単純な二分探索木であるため、 ソート済みのデータが登録された場合は極端な性能劣化が起きます。 近い将来、赤黒木などの平衡木に実装を置換する予定です。

バージョン:
$Id: MultiKeyTree.java,v 1.3 2003/02/27 05:29:57 YT0050 Exp $
作成者:
YTP
関連項目:
OneLayerListener, OneLayerListener

フィールドの概要
static boolean ASC
          昇順ソートを指定する際に使用します。
static boolean DESC
          降順ソートを指定する際に使用します。
 
コンストラクタの概要
protected MultiKeyTree()
          デフォルトコンストラクタは使用しないで下さい。
  MultiKeyTree(int iLayer)
          iLayerで指定された階層のキーを持つMultiKeyTreeクラスインスタンスを生成します。
  MultiKeyTree(int iLayer, boolean[] orders)
          iLayerで指定された階層のキーと、 ordersで指定されたソート順を持つMultiKeyTreeクラスインスタンスを生成します。
 
メソッドの概要
 void addListener(TreeActionListener listener)
          このクラスからイベントを通知するアクションリスナーを登録します。
 void addOneLayerListener(OneLayerListener listener)
          1階層走査においてこのクラスからイベントを通知するアクションリスナーを登録します。
 Object get(Object[] keys)
          keysで指定されたキーに対応する値を返します。
 Iterator keys(Object[] keys)
          keysで指定されたノード配下の1階層分のキーを昇順にソートし、 その結果をイテレータとして返します。
 Iterator keys(Object[] keys, boolean order)
          keysで指定されたノード配下の1階層分のキーをorderで指定された順にソートし、 その結果をイテレータとして返します。
 void put(Object[] keys)
          キーを木に登録します。
 void setComparators(Comparator[] comparators)
          全階層分のコンパレータを設定します。
 void traverse()
          ルートノードを含む全ノードを走査します。
 void traverse(Object[] keys)
          指定されたキーを持つノード配下を走査します。
 void traverse(Object[] keys, int iLayer)
          指定されたキーと階層のノード配下を走査します。
 void traverseOneLayer(Object[] keys)
          keysで指定されたノード配下の1階層だけを昇順で走査します。
 void traverseOneLayer(Object[] keys, boolean order)
          keysで指定されたノード配下の1階層だけをorderで指定されたソート順で走査します。
 Iterator values(Object[] keys)
          keysで指定されたノード配下の1階層分のキーを昇順にソートし、 そのキーに対応するデータの並びをイテレータとして返します。
 Iterator values(Object[] keys, boolean order)
          keysで指定されたノード配下の1階層分のキーをorderで指定された順にソートし、 そのキーに対応するデータの並びをイテレータとして返します。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

ASC

public static final boolean ASC
昇順ソートを指定する際に使用します。

関連項目:
定数フィールド値

DESC

public static final boolean DESC
降順ソートを指定する際に使用します。

関連項目:
定数フィールド値
コンストラクタの詳細

MultiKeyTree

protected MultiKeyTree()
デフォルトコンストラクタは使用しないで下さい。


MultiKeyTree

public MultiKeyTree(int iLayer)
iLayerで指定された階層のキーを持つMultiKeyTreeクラスインスタンスを生成します。

パラメータ:
iLayer - ソートキーの最大レベル

MultiKeyTree

public MultiKeyTree(int iLayer,
                    boolean[] orders)
iLayerで指定された階層のキーと、 ordersで指定されたソート順を持つMultiKeyTreeクラスインスタンスを生成します。

パラメータ:
iLayer - 木の階層数
orders - 各レベルのソート順 昇順:ASC 降順:DESC
メソッドの詳細

addListener

public void addListener(TreeActionListener listener)
このクラスからイベントを通知するアクションリスナーを登録します。 このメソッドの中から、TreeActionListener.initializeRoot()メソッドが呼び出されます。

パラメータ:
listener - アクションリスナー

addOneLayerListener

public void addOneLayerListener(OneLayerListener listener)
1階層走査においてこのクラスからイベントを通知するアクションリスナーを登録します。

パラメータ:
listener - アクションリスナー

setComparators

public void setComparators(Comparator[] comparators)
全階層分のコンパレータを設定します。 キーを比較する規則を階層ごとに変えたい場合や、 標準のコンパレータ(辞書順比較)を使わない場合に、 当メソッドにてコンパレータを設定して下さい。
全階層で標準コンパレータを使用する場合、当メソッドの呼び出しは不要です。

パラメータ:
comparators - 全階層分のコンパレータ
関連項目:
DefaultComparator

put

public void put(Object[] keys)
キーを木に登録します。 このメソッドの内部から、 TreeActionListener.create(int)または TreeActionListener.match(int, Object)が呼び出されます。

パラメータ:
keys - キーの配列

get

public Object get(Object[] keys)
keysで指定されたキーに対応する値を返します。 キーが見つからない場合nullを返します。

パラメータ:
keys - キーの配列
戻り値:
指定されたキーに対応した値(該当なしの場合null)

traverse

public void traverse()
ルートノードを含む全ノードを走査します。 ノードを走査しながらアクションリスナーに対して、 TreeActionListener.makeHeader(Object, int, Object) TreeActionListener.sort(Object[], int, Object) TreeActionListener.makeFooter(Object, int, Object) を随時呼び出しイベントを通知します。


traverse

public void traverse(Object[] keys)
指定されたキーを持つノード配下を走査します。 ノードを走査しながらアクションリスナーに対して、 TreeActionListener.makeHeader(Object, int, Object)TreeActionListener.sort(Object[], int, Object)TreeActionListener.makeFooter(Object, int, Object) を随時呼び出しイベントを通知します。

パラメータ:
keys - キーの配列
例外:
NoSuchElementException - 指定されたキーが見つからなかった場合

traverse

public void traverse(Object[] keys,
                     int iLayer)
指定されたキーと階層のノード配下を走査します。 ノードを走査しながらアクションリスナーに対して、 TreeActionListener.makeHeader(Object, int, Object)TreeActionListener.sort(Object[], int, Object)TreeActionListener.makeFooter(Object, int, Object) を随時呼び出しイベントを通知します。
呼び出しの例:
iLayer=2, keys[0]="001", keys[1]="B0", keys[2]="AA001" の場合、 第1階層のキーが001・第2階層のキーがB0であるノードを開始点として走査します。 第3階層以降のキーは無視されます。

パラメータ:
keys - キーの配列
iLayer - 走査対象キーの階層数
例外:
NoSuchElementException - 指定されたキーが見つからなかった場合

traverseOneLayer

public void traverseOneLayer(Object[] keys)
keysで指定されたノード配下の1階層だけを昇順で走査します。 このメソッドの中から、 OneLayerListener.sortOneLayer(Object, Object)メソッドが呼び出されます。

パラメータ:
keys - キーの配列
例外:
NoSuchElementException - 指定したキーを持つノードが見つからなかった場合

traverseOneLayer

public void traverseOneLayer(Object[] keys,
                             boolean order)
keysで指定されたノード配下の1階層だけをorderで指定されたソート順で走査します。 このメソッドの中から、 OneLayerListener.sortOneLayer(Object, Object)メソッドが呼び出されます。

パラメータ:
keys - キーの配列
order - ソート順
例外:
NoSuchElementException - 指定したキーを持つノードが見つからなかった場合

keys

public Iterator keys(Object[] keys)
keysで指定されたノード配下の1階層分のキーを昇順にソートし、 その結果をイテレータとして返します。 当メソッドを利用するクラスでは、OneLayerListener インタフェースを実装する必要があります。 返すイテレータは木と同期されないので、イテレータ走査中に木が更新されても、 その結果はイテレータには反映されません。

パラメータ:
keys - キーの配列
戻り値:
キー集合のイテレータ

keys

public Iterator keys(Object[] keys,
                     boolean order)
keysで指定されたノード配下の1階層分のキーをorderで指定された順にソートし、 その結果をイテレータとして返します。 当メソッドを利用するクラスでは、OneLayerListener インタフェースを実装する必要があります。 返すイテレータは木と同期されないので、イテレータ走査中に木が更新されても、 その結果はイテレータには反映されません。

パラメータ:
keys - キーの配列
戻り値:
キー集合のイテレータ

values

public Iterator values(Object[] keys)
keysで指定されたノード配下の1階層分のキーを昇順にソートし、 そのキーに対応するデータの並びをイテレータとして返します。 当メソッドを利用するクラスでは、OneLayerListener インタフェースを実装する必要があります。 返すイテレータは木と同期されないので、イテレータ走査中に木が更新されても、 その結果はイテレータには反映されません。

パラメータ:
keys - キーの配列
戻り値:
値集合のイテレータ

values

public Iterator values(Object[] keys,
                       boolean order)
keysで指定されたノード配下の1階層分のキーをorderで指定された順にソートし、 そのキーに対応するデータの並びをイテレータとして返します。 当メソッドを利用するクラスでは、OneLayerListener インタフェースを実装する必要があります。 返すイテレータは木と同期されないので、イテレータ走査中に木が更新されても、 その結果はイテレータには反映されません。

パラメータ:
keys - キーの配列
戻り値:
値集合のイテレータ


Copyright© 2003, Your Technology Partner(YTP). All rights reserved.