gpt4 book ai didi

java - 一次到ArrayList,还是每次到ArrayList?

转载 作者:行者123 更新时间:2023-11-30 04:32:00 26 4
gpt4 key购买 nike

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

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 或类似的东西)。每个单独的元素都有一个索引,表示它在其父元素中的位置。页面中的元素数量和章节中的页面数量不一致。

在父级中获取子级的索引很容易,但是在祖 parent 中获取子级的索引又如何呢?

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

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

  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.

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

最佳答案

你需要造一棵树。出于某种原因,程序员希望将所有内容展平为表格结构。您正在谈论一棵树,您需要使用一棵树或制作一棵树。

遗憾的是,Java 集合中没有任何内容可以实现树。您可以相当轻松地制作它们。

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

既然你正在做一个文档,我会推荐Composite。

关于java - 一次到ArrayList,还是每次到ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417637/

26 4 0