谈论绩效和资源。
在添加和编辑值,ArrayList或TreeMap时,哪一个更快且需要的资源更少?
或者是否有任何类型的数据可以击败这两个? (它必须能够以某种方式对数据进行排序)
答案 0 :(得分:5)
ArrayLists和TreeMaps是用于不同事物的不同类型的结构。了解您计划使用这些结构的内容会很有帮助。
<强>的ArrayList 强>
<强> TreeMap的强>
对ArrayList进行排序将花费O(nlogn)时间(插入所有内容后),而TreeMap将始终排序。
修改强>
您已经提到过您正在处理从数据库中检索到的记录。由于它们来自数据库,我认为它们已经被排序 - 在这种情况下,您应该将它们逐个插入到ArrayList中。
答案 1 :(得分:4)
取决于您的需求。
如果我们讨论排序数据,因为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)
(称为big-Oh)表示法,请将其视为结构具有n
元素时所需的秒数的公式。因此,如果您的ArrayList
包含1000个元素(n=1000
),则需要3
秒(log 1000 = 3
)才能找到该项目。虽然插入新元素需要1000秒。
另一方面,TreeMap
会花费 3 秒来搜索和插入。
答案 2 :(得分:3)
ArrayList只需要O(1)来添加和编辑值,因为您只使用索引访问它。但是,在ArrayList中搜索元素是O(n),因为你必须最多通过列表的所有元素。
但您必须了解要实施的数据结构。很难选择ArrayList和TreeMap,因为它们实际上并不是出于同样的目的(Map不允许重复但不允许使用ArrayList等。)
这是两张纸,描述了两者之间的差异(以及其他类型的集合)。
List
和Map
:
也添加了Set
: