1

我有一个具有这样结构的程序。

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

这种结构在我的程序中由 JPanel 表示。这意味着这个结构必须在视觉上表示,我宁愿不制作一个完整的 ArrayList 复杂(除非绝对必要),因为每个 JPanel 都有一个 ZOrder 组件和一个 getParent() 方法。

这种结构是一维的,这意味着父级具有其子级的一维数组(当我说数组时,它纯粹是描述性的,我不是指 ArrayList 或类似的东西)。每个单独的元素都有一个索引,表示它在(on?)它的父元素中的位置。一页的元素个数和一章的页数不一致。

在它的父母中很容易获得孩子的索引,但是它的祖父母呢?

由于元素可以(并且通常是)编号,每章有一个编号列表,我必须知道章节中元素的索引,因此我可以在将新元素添加到列表时调整数字(它不必最后添加)。

这可以通过两种方式解决(据我所知,即):

  1. 每章都有一个 ArrayList 来保存所有元素。这将要求我每次向任何页面添加新元素时,也将其添加到章节数组中。为了实现这一点,我必须浏览所有以前的页面,将它们上的所有元素相加,并将当前页面上新元素的索引添加到该数字,结果是本章中新元素的索引,因此,在数组中。每次我添加一个新元素时都这样做。

  2. 每次我需要获取章节中元素的顺序时重新创建arrayList。这再次意味着要浏览每一页并一个接一个地添加每个元素,直到我到达本章的末尾。每次添加新元素时我都需要它。

所以问题是,这两种方法中哪一种更好(更高效的内存或处理器时间)?哪个更符合 Java 和编程的精神?有没有我不知道的第三种选择?

章节示例:

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

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

问题是:哪种方式更好?如果您有更好的想法,可以告诉我,但我想知道以上两种方式中哪种方式更好。

4

1 回答 1

2

You need to make a tree. For some reason, programmers want to flatten everything out into tabular structures. You are talking about a tree, you need to either use one or make one.

Sadly, there is nothing in the Java Collections for implementing Trees. You can make them fairly easily.

If you have things that are different contained in the tree, but that need to be treated similarly (as nodes), then do a simple implementation of the Composite Pattern. A good example is a filesystem tree: each node is either a Folder or a File. If you both have them implement an interface called FilesystemItem, then you can put them into their tree structure.

Since you are doing a Document, I would recommend Composite.

于 2013-01-19T18:56:19.423 回答