public class SizeSequence extends Object
SizeSequenceオブジェクトは、サイズおよび対応する位置の、順序付けされたリストを効率的に維持します。 SizeSequenceの状況として適切な例としては、サイズが等しくない複数の行を表示するコンポーネントの場合があります。 この場合、単一のSizeSequenceオブジェクトを使って、すべての行の高さとY位置を追跡できます。
もう1つの例として、列サイズが等しくないJTableなどの複数列コンポーネントがあります。 JTableは、単一のSizeSequenceオブジェクトを使ってすべての列の幅とX位置を格納できます。 続いてJTableは、SizeSequenceオブジェクトを使って特定の位置に対応する列を見つけることができます。 1つまたは複数の列サイズが変更になったときにはいつでも、JTableはSizeSequenceオブジェクトを更新できます。
次の図は、複数列コンポーネントのサイズと位置データの関係を示しています。
この図で、最初のインデックス(0)は最初の列に対応し、2番目のインデックス(1)は2番目の列に対応する、というようになっています。 最初の列の位置は0で始まり、この列はsize0ピクセルを占めます。size0はgetSize(0)が返す値です。 したがって最初の列はsize0 - 1で終わります。 続いて2番目の列がsize0から始まり、size1(getSize(1)) ピクセルを占めます。
SizeSequenceオブジェクトは単に軸に沿った間隔を表します。 上記の例では、間隔はピクセル単位の高さまたは幅を表しています。 しかし、一日のうちの時間など、ほかの測定単位も同じように有効です。
getIndex(position)およびsetSize(index, size)の2つです。 内部形式にどちらを選んでも、エントリ数が大きくなると2つの操作のどちらかは効率が悪くなります。 サイズを格納した場合、特定の位置を囲むエントリのインデックスの検索は、エントリ数に比例して時間がかかります。 逆に位置を格納した場合、特定のインデックスにあるエントリのサイズの設定は、影響を受けるエントリの位置を更新する必要があり、やはりエントリ数に比例して計算に時間がかかります。
前述の方法と同じく、このクラスは内部にN個の整数の配列を保持しますが、サイズベースの方法と位置ベースの方法の中間の、ハイブリッドなエンコーディングを使用します。 これによって、情報を格納するのに必要な空間は同じですが、ほとんどの操作をO(N)時間ではなくLog(N)時間で実行できるデータ構造となります。Nはリストにあるエントリ数です。
エントリ数のO(N)のまま残る操作は、insertEntriesメソッドとremoveEntriesメソッドの2つです。両メソッドとも、内部配列を整数サイズのセットに変換し、それを新しい配列にコピーし、そのあとハイブリッド表現を適切に修正することによって実装します。
| コンストラクタ | 説明 |
|---|---|
SizeSequence() |
エントリを含まない新しい
SizeSequenceオブジェクトを生成します。 |
SizeSequence(int numEntries) |
指定された数のエントリを含む、新しい
SizeSequenceオブジェクトを生成します。エントリはすべてサイズ0に初期化されています。 |
SizeSequence(int[] sizes) |
指定されたサイズを含む新しい
SizeSequenceオブジェクトを生成します。 |
SizeSequence(int numEntries, int value) |
指定された数のエントリを含む、新しい
SizeSequenceオブジェクトを生成します。エントリはすべてサイズvalueに初期化されています。 |
| 修飾子と型 | メソッド | 説明 |
|---|---|---|
int |
getIndex(int position) |
指定された位置に対応するエントリのインデックスを返します。
|
int |
getPosition(int index) |
指定されたエントリの開始位置を返します。
|
int |
getSize(int index) |
指定されたエントリのサイズを返します。
|
int[] |
getSizes() |
全エントリのサイズを返します。
|
void |
insertEntries(int start, int length, int value) |
連続するエントリのグループをこの
SizeSequenceに追加します。 |
void |
removeEntries(int start, int length) |
連続するエントリのグループをこの
SizeSequenceから削除します。 |
void |
setSize(int index, int size) |
指定されたエントリのサイズを設定します。
|
void |
setSizes(int[] sizes) |
sizes引数のデータを使って、このSizeSequenceオブジェクトをリセットします。 |
public SizeSequence()
SizeSequenceオブジェクトを生成します。 エントリを登録するには、insertEntriesまたはsetSizesを使います。 public SizeSequence(int numEntries)
SizeSequenceオブジェクトを生成します。エントリはすべてサイズ0に初期化されています。numEntries - 追跡するサイズの数NegativeArraySizeException - numEntries < 0の場合public SizeSequence(int numEntries,
int value)
SizeSequenceオブジェクトを生成します。エントリはすべてサイズvalueに初期化されています。numEntries - 追跡するサイズの数value - 各サイズの初期値public SizeSequence(int[] sizes)
SizeSequenceオブジェクトを生成します。sizes - SizeSequenceに格納されるサイズの配列public void setSizes(int[] sizes)
sizes引数のデータを使って、このSizeSequenceオブジェクトをリセットします。 このメソッドは、このオブジェクトがsizes配列と同じだけのエントリを格納するよう初期化します。 各エントリのサイズは、sizesの対応する項目の値に初期化されます。 sizes - このSizeSequenceに格納されるサイズの配列public int[] getSizes()
public int getPosition(int index)
getPosition(0)は0を返し、getPosition(1)はgetSize(0)を、getPosition(2)はgetSize(0)+getSize(1)を返します。
indexがlengthより大きい場合、返される値は無意味です。
index - 位置が要求されているエントリのインデックスpublic int getIndex(int position)
getIndex(0)は0ですが、これは、最初のエントリはいつも位置0から始まるためです。 position - エントリの位置public int getSize(int index)
indexが一定の範囲内(0 <= index < getSizes().length)にない場合、動作は未確定です。 index - エントリに対応するインデックスpublic void setSize(int index,
int size)
indexの値が一定の範囲内(0 <= index < getSizes().length)にない場合、動作は未確定です。 index - エントリに対応するインデックスsize - エントリのサイズpublic void insertEntries(int start,
int length,
int value)
SizeSequenceに追加します。 startとlengthの値は、(0 <= start < getSizes().length) AND (length >= 0)の条件を満たす必要があります。 この条件を満たさない場合、動作が未確定なため、例外がスローされる場合があります。 start - グループ内の最初のエントリに割り当てられるインデックスlength - グループのエントリ数value - 新しい各エントリに割り当てるサイズArrayIndexOutOfBoundsException - パラメータが次の範囲内にない場合: (0 <= start < (getSizes().length)) AND (length >= 0)public void removeEntries(int start,
int length)
SizeSequenceから削除します。 startとlengthの値は、(0 <= start < getSizes().length) AND (length >= 0)の条件を満たす必要があります。 この条件を満たさない場合、動作が未確定なため、例外がスローされる場合があります。 start - 削除される最初のエントリのインデックスlength - 削除されるエントリの数 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。