Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java treemap vs arraylist-性能与性能;迭代/添加/编辑值时的资源_Java_Performance_Arraylist_Resources_Treemap - Fatal编程技术网

Java treemap vs arraylist-性能与性能;迭代/添加/编辑值时的资源

Java treemap vs arraylist-性能与性能;迭代/添加/编辑值时的资源,java,performance,arraylist,resources,treemap,Java,Performance,Arraylist,Resources,Treemap,谈论绩效和资源 在添加和编辑值时,ArrayList或TreeMap哪个更快,需要更少的资源 或者有任何类型的数据可以击败这两个?(它必须能够以某种方式对数据进行排序)ArrayList只需要O(1)即可添加和编辑值,因为您只能使用索引访问它。但是,在ArrayList中搜索一个元素是O(n),因为您最多只能搜索列表中的所有元素 但是您必须知道将实现什么样的数据结构。很难在ArrayList和TreeMap之间进行选择,因为它们的用途并不完全相同(映射不允许重复,但不允许ArrayList,等等

谈论绩效和资源

在添加和编辑值时,ArrayList或TreeMap哪个更快,需要更少的资源

或者有任何类型的数据可以击败这两个?(它必须能够以某种方式对数据进行排序)

ArrayList只需要O(1)即可添加和编辑值,因为您只能使用索引访问它。但是,在ArrayList中搜索一个元素是O(n),因为您最多只能搜索列表中的所有元素

但是您必须知道将实现什么样的数据结构。很难在ArrayList和TreeMap之间进行选择,因为它们的用途并不完全相同(映射不允许重复,但不允许ArrayList,等等)

这里有两张表格描述了两者(以及其他类型的集合)之间的差异

列表
地图


还添加了
Set


取决于您需要什么

如果我们谈论的是已排序的数据,因为
ArrayList
是一个列表/数组,如果它已排序,您可以在
O(logn)
速度中获得一个值。但是,插入是
O(n)
,因为插入新元素时可能需要移动整个数组

TreeMap
数据结构实现为一个红黑树,插入时间和搜索时间均为
O(logn)

因此,简而言之:

Data Structure         Insertion Speed    Search Speed
ArrayList (sorted)     O(n)               O(log n)
TreeMap                O(log n)           O(log n)
我肯定会选择
树形图。它还有一个额外的好处,就是现在就可以准备就绪(您必须自己实现一些代码才能使
ArrayList
工作)

注意:
如果没有得到
O(n)
(称为big-Oh)表示法,请将其视为结构包含
n
元素时所需秒数的公式。因此,如果您有一个包含1000个元素(
n=1000
)的
ArrayList
),则需要
3
秒(
log1000=3
)才能在那里找到项。不过,插入新元素需要1000秒


另一方面,
TreeMap
将花费3秒来搜索和插入。

数组列表和TreeMap是用于不同事物的不同类型的结构。了解您计划将这些结构用于什么目的将很有帮助

ArrayList

  • 允许重复(它是一个列表)
  • 摊销O(1)添加到列表末尾
  • O(n)插入列表中的任何其他位置
  • O(1)进入
  • O(n)删除
TreeMap

  • 不允许重复的关键点(它是一个地图)
  • O(logn)插入
  • O(logn)访问
  • O(logn)将其拆下
排序ArrayList将花费O(nlogn)时间(插入所有内容后),而树映射将始终进行排序

编辑


您已经提到,您正在处理从数据库检索的记录。由于它们来自数据库,我假设它们已经被排序了——在这种情况下,您应该将它们逐个插入ArrayList。

您遇到的性能或资源使用问题到底是什么?如果你“只是想知道”,不要过早地进行优化:谢谢你的输入,现在我正在处理从数据库检索到的大约50000条记录。除非每件物品都非常大,否则你的电脑仍然能够以闪电般的速度处理这些数量。记住,这是我们在这里讨论的内存操作。我的观点是:不要假设你会遇到问题。做个测试。创建一个包含500000个条目的ArrayList,并对其进行处理。如果你遇到麻烦,考虑其他选择。过早考虑性能和资源使用只会毁掉你的程序。在这里,这是多年痛苦的经历。