谈论性能和资源。
添加和编辑值时,ArrayList 和 TreeMap 哪个更快且需要的资源更少?
或者是否有任何类型的数据可以击败这两者?(它必须能够以某种方式使数据排序)
谈论性能和资源。
添加和编辑值时,ArrayList 和 TreeMap 哪个更快且需要的资源更少?
或者是否有任何类型的数据可以击败这两者?(它必须能够以某种方式使数据排序)
ArrayLists 和 TreeMaps 是用于不同事物的不同类型的结构。了解您计划使用这些结构的目的会很有帮助。
数组列表
树状图
对 ArrayList 进行排序将花费 O(nlogn) 时间(在插入所有内容之后),而 TreeMap 将始终被排序。
编辑
您已经提到您正在处理从数据库中检索到的记录。由于它们来自数据库,我会假设它们已经排序 - 在这种情况下,您应该将它们一一插入到 ArrayList 中。
取决于你需要什么。
如果我们谈论的是排序数据,因为它ArrayList
是一个列表/数组,如果它是排序的,你可以得到一个O(log n)
速度值。但是,要插入它是O(n)
,因为您在插入新元素时可能必须移动整个数组。
TreeMap
数据结构实现为红黑树,插入时间和搜索时间均为O(log n)
。
所以,简而言之:
Data Structure Insertion Speed Search Speed
ArrayList (sorted) O(n) O(log n)
TreeMap O(log n) O(log n)
我肯定会去TreeMap
。它还有一个额外的好处,那就是现在一切都准备好了(你必须自己实现一些代码才能完成ArrayList
工作)。
注意:
如果您没有得到(称为大哦)符号,请将其视为结构具有元素O(n)
时所需的秒数的公式。n
因此,如果您有一个ArrayList
包含 1000 个元素的 ( n=1000
),则需要3
几秒钟 ( log 1000 = 3
) 才能在其中找到一个项目。但是插入一个新元素需要 1000 秒。
TreeMap
另一方面,搜索和插入都需要3秒。
ArrayList 只需要 O(1) 来添加和编辑一个值,因为您只使用索引访问它。但是,在 ArrayList 中搜索一个元素是 O(n),因为您最多必须遍历列表中的所有元素。
但是你必须知道你将实现什么数据结构。很难在 ArrayList 和 TreeMap 之间进行选择,因为它们的目的并不相同(Map 不允许重复,但 ArrayList 不允许,等等)。
这是两张表,描述了两者(以及其他类型的集合)之间的差异。
List
和Map
:
也添加Set
了: