java - StringBuffer.append() 与 ArrayList<String>.add()

标签 java list arraylist thymeleaf

就性能和内存而言,哪个最有效?

现在,我有一个 List<ArrayList<String>>它保存了近 200,000 条记录,由单独的业务逻辑生成。我正在尝试使用 Thymeleaf 在 HTML 页面中以表格格式打印它。 目前,我正在使用嵌套 th:each循环使用 th:text 打印数据。正如预期的那样,这需要很长时间。

我调查了this发现th:utext可用于在 Thymeleaf 中打印 html 内容。

我的业务逻辑生成这 200,000 条记录,当前给出 List<ArrayList<String>>对象,但我可以将其修改为 List<String>通过更改来对象。

但是,我的问题是,这会提高内存效率吗?它很有可能会提高性能效率,但我主要关心的是内存效率。会List<ArrayList<String>>占用与 List<String> 相同的内存量包含相同的数据? (通过相同的数据,我的意思是,内容是相同的 - 而不是 ArrayList<String> ,它将包含一个字符串,中间有 HTML 元素)。还是会占用更多内存?

我对数据结构的空间复杂性的理解相对较新;因此提出查询。

最佳答案

撇开渲染具有 20 万条记录的 HTML 表的奇怪之处不谈,这是这种形式问题的最常见答案......

In terms of performance and memory, which would be the most efficient?

...是:测量它!

您建议的方法(将 List<ArrayList<String>> 替换为 List<String> )意味着您希望实现以下目的:

  • List<String>List<ArrayList<String>> 占用空间更小
  • Thymeleaf 在处理 List<String> 方面要做的工作较少
  • 使用 List<String> 获得的任何好处不会被转动 List<ArrayList<String>> ... generated by a separate business logic 的额外成本所抵消进入List<String>在服务器端

我认为您确定这一点的唯一方法是比较两种方法产生的一些指标。例如:

一阶测量:

  • 测量创建响应服务器端所需的时间
  • 测量在浏览器中呈现响应所需的时间

二阶测量:

  • 在创建和发出响应时测量服务器端的内存和 CPU 使用情况
  • 在渲染响应时测量客户端的内存和 CPU 使用情况

我怀疑实现建议的更改可能非常简单,并且当然可以轻松收集一阶测量结果。因此,与其尝试根据第一原则评估影响,不如直接去做,看看它是否对您有帮助。

关于java - StringBuffer.append() 与 ArrayList<String>.add(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508342/

相关文章:

java - 从 JTable 检索数据

Java邮件 : TLS on port 25 with separate truststore possible?

python - 如何在列表中的某些位置\n

Java 检索返回的 ArrayList 到 HashMap

java - Xtext 错误 : Registered resource factory is needed

python - 在元组/列表之间转换时会发生什么?

python - 如何获取列表中的元素数量?

java - 在我的 ArrayList 上保存项目(添加不断替换第一个)

Java :Comparing two lists

java - 将 JPanel 添加到 BorderLayout.Center 时,以前的内容仍然可见