- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有这样结构的程序。
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 中获取子级的索引又如何呢?
由于元素可以(通常是)编号,每章都有一个编号列表,我必须知道章节中元素的索引,这样我就可以在添加新元素时调整数字列表(不必在最后添加)。
这可以通过两种方式解决(据我所知):
每章都有一个 ArrayList 来保存所有元素。这需要我每次向任何页面添加新元素时,也将其添加到章节数组中。为了实现这一点,我必须遍历所有前面的页面,将它们上的所有元素相加,并将当前页面上的新元素的索引添加到该数字,结果是该章中新元素的索引,因此,在数组中。每次添加新元素时都执行此操作。
每次我需要获取章节中元素的顺序时,都重新创建 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/
将一个数组列表分配给另一个数组列表与在两个数组列表之间使用 addAll 方法有什么区别? 1 > arrayList = arrayList;//应该将后面的arrayList的值分配给第一个。 2
所以我在将 ArrayList 添加到我的 ArrayList 时遇到了一些问题。将其想象成一张 table 。 下面是一些示例代码: ArrayList currentRow = new Arra
我一直在尝试转换 ArrayList> to ArrayList> 的字符串 这是我尝试构建的代码。 public void convertString (ArrayList> templist) {
我有一个 ArrayList (alal) 和一个 ArrayList(al) 的 ArrayList。我想将 al 插入 alal,但我希望 alal.get(0) 包含 al 拥有的所有内容以及添
很抱歉标题太长,如果您能想到更好的标题,请告诉我! 我正在做的是尝试创建一个 ArrayList 的 ArrayList 并将 ArrayList 逐个添加到其中。两个AL>我所拥有的称为三角形和正方
我有带有值的 mList2。存在具有相同 id 的值。如何获取具有相同 id 的对象分组的 List 或 ArrayList 并将其添加到 ArrayList>? List mList2 = list
我正在创建一个 ArrayList的 ArrayList并添加 ArrayLists给它。但每次我对 ArrayList 进行更改时, 它反射(reflect)在 ArrayList 中. 示例: L
谁能解释一下ArrayList之间的区别是什么? , ArrayList和 ArrayList是什么时候使用它们?它们在实现层面上是相同的还是各自具有不同的含义? 最佳答案 ArrayList 特别是
这个问题在这里已经有了答案: Java generics: List> = new LinkedList>() is prohibited? (3 个答案) 关闭 9 年前。 为什么这段代码可以编译
我的 arraylistS 在覆盖数组列表中的行为类似于同一个实例。 我用其中一个来操作 i=0; manupulate((ArrayList)theCoveringRootArrayList.get
我们遇到这个错误 java.lang.NullPointerException at java.util.ArrayList.(Unknown Source) at de.mystuf
据我了解,ArrayList 类继承其父“List”类的 equals() 函数来查找两个成员对象是否相同。这是否意味着“contains()”线性搜索(使用“equal”)来查找 ArrayList
这个问题已经有答案了: What is the diamond operator in Java? (2 个回答) 已关闭 7 年前。 正如标题所说,在Java中,这两种语句有什么区别吗? 通常我都能
我正在尝试求解帕斯卡三角形。我有两个用 Java 编写的代码片段,第一个创建 inner ArrayList 几次并且对我来说效果很好。 但是在代码的第二个版本中,如果我修改 inner ArrayL
正如标题所示,我有两个 ArrayList。奇怪的是,在一个数组列表上设置一个值会改变另一个数组列表的值。 一些信息:这些是 Entry 类型的 ArrayList,每个列表都包含一个金额和一个值(这
我已经添加了一个项目到列表 a,然后添加了列表 a 到列表 b 并再次做了同样的事情。 我的问题是,如果我打印 b.get(0) 和 b.get(1),我会得到相同的列表,这两个项目都是 “一”和“二
我正在创建一个 ArrayList of ArrayList of ArrayList 的 ArrayList 并按以下方式填充它。它正确地填充它。我已经通过调试和 println 弄清楚了这一点。但
实现可以在 Arraylist 和 Integer 中存储任何级别的 ArrayList 的 ArrayList 的最佳方法是什么。 List> list = ArrayList(); 仅允许列表中最
在下面的示例中,我将如何将 ArrayList al4 的内容与其他 ArrayList 中的任何一个进行比较?以同样的方式,我将 al1 与 al2 进行了比较。 import java.util.
好的,所以我之前发布了一个线程,它回答了我的很多问题并帮助我改进了我的代码,但是,我遇到了另一个问题,我不知道为什么,但我认为也许该副本只是指向原始对象..(尽管我已尽力避免这种情况) 在我的游戏代码
我是一名优秀的程序员,十分优秀!