1

このような構造のプログラムがあります。

Document which contains (up to 20)
Chapters which contain (up to 100) 
Pages which contain (up to 20)
Elements

この構造は、私のプログラムではJPanelsによって表されます。つまり、この構造は視覚的に表現する必要があります。各JPanelにはコンポーネントのZOrderとgetParent()メソッドがあるため、(絶対に必要な場合を除いて)ArrayListの複合体全体を作成したくありません。

この構造は1次元です。つまり、親には子の1次元配列(配列と言えば、純粋に説明的なものであり、ArrayListなどを意味するものではありません)があります。個々の要素には、その親内(上?)の位置を表すインデックスがあります。ページ内の要素の数、およびチャプター内のページに一貫性がありません。

親の中で子のインデックスを取得するのは簡単ですが、祖父母はどうでしょうか。

要素には番号を付けることができ(通常は番号が付けられます)、章ごとに1つの番号付きリストがあるため、章内の要素のインデックスを知っている必要があります。これにより、新しい要素がリストに追加されたときに番号を調整できます(最後に追加する必要はありません)。

これは2つの方法で解決できます(私が知っている、つまり):

  1. すべての要素を保持するArrayListを各章に配置します。これには、ページに新しい要素を追加するたびに、それをチャプター配列にも追加する必要があります。これを実現するには、前のすべてのページを調べ、それらのすべての要素を合計し、現在のページの新しい要素のインデックスをその番号に追加します。その結果、章の新しい要素のインデックスになります。したがって、アレイ内。そして、新しい要素を追加するたびにそれを行います。

  2. 章の要素の順序を取得する必要があるたびに、arrayListを再作成します。これもまた、各ページを調べて、章の終わりに達するまで各要素を次々に追加することを意味します。そして、新しい要素が追加されるたびに必要になります。

したがって、問題は、この2つの方法のどちらが優れているか(時間的にはより効率的なメモリまたはプロセッサ)ですか?Javaとプログラミングの精神に沿ったものはどれですか?私が知らない3番目のオプションはありますか?

章の例:

Page one {
1. something
2. more something
3. nothing
.
.
.
16. still nothing
}

Page two {
17. maybe something
18. nope, still nothing
.
.
.
21. giberish
}
etc.

問題は、どちらの方法が優れているかということです。あなたがより良い考えを持っているなら、あなたは私に言うことができます、しかし私は上記の2つのどちらがより良いかを知りたいです。

4

1 に答える 1

2

木を作る必要があります。何らかの理由で、プログラマーはすべてを表形式の構造にフラット化したいと考えています。あなたは木について話しているので、それを使うか作る必要があります。

残念ながら、ツリーを実装する Java コレクションには何もありません。かなり簡単に作成できます。

ツリーに異なるものが含まれているが、(ノードとして) 同様に処理する必要がある場合は、複合パターンの単純な実装を行います。良い例はファイルシステム ツリーです。各ノードはフォルダーまたはファイルのいずれかです。両方とも FilesystemItem と呼ばれるインターフェースを実装している場合は、それらをツリー構造に配置できます。

あなたはドキュメントをやっているので、コンポジットをお勧めします。

于 2013-01-19T18:56:19.423 に答える