我有一个IndexedSeq,我会读取一些东西,然后更新它并循环。
哪个更有效:
因此,Scala默认为不可变(第二种方法)。是否每3秒钟不得不一次又一次地删除和分配一百万次?
答案 0 :(得分:3)
鉴于你如何提出这个问题,我强烈怀疑你已经知道答案(在某些情况下)。
然而,哪个更危险?
关于不变性的好处在于它很容易推理,而不是它很快。也就是说,各种树结构可以让你回到O(log n)区域进行你可能担心的操作O(n);有时甚至可以通过巧妙地选择数据结构来实现O(1)。
特别是,Scala的Vector
是默认的IndexedSeq
,它有updated
方法只能O(log n)
工作,基于32的对数。它肯定远不及更新阵列那么快;根据细节,它甚至可能慢100倍。但是大多数当你实际上并不需要快100倍的东西时,你需要一些没有破坏的东西。
诀窍在于了解您的要求并在适当的地方使用适当的语言结构。