到ArrayList一次,还是每次都要到ArrayList?

时间:2013-01-19 18:50:18

标签: java arraylist hierarchy

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

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

这个结构在我的程序中由JPanels表示。这意味着这个结构必须在视觉上表现出来,而且我不想制作一个完整的ArrayList复合体(除非绝对必要),因为每个JPanel都有一个组件的ZOrder和一个getParent()方法。

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

很容易将孩子的索引纳入其父母的内容,但是它的祖父母呢?

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

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

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

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

  3. 所以问题是,这两种方法中的哪一种更好(更有效的内存或处理器时间)?哪个更符合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.
    

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

1 个答案:

答案 0 :(得分:2)

你需要做一棵树。出于某种原因,程序员希望将所有内容压缩成表格结构。你在谈论一棵树,你需要使用一棵树或制作一棵树。

遗憾的是,Java Collections中没有任何实现Trees的功能。你可以很容易地制作它们。

如果树中包含的内容不同,但需要对其进行类似处理(作为节点),则执行Composite Pattern的简单实现。一个很好的例子是文件系统树:每个节点都是文件夹或文件。如果你们都让它们实现了一个名为FilesystemItem的接口,那么你可以将它们放入它们的树结构中。

由于您正在撰写文档,我建议使用Composite。