- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我知道 .append
偶尔会增加数组的容量并形成数组的新副本,但 .removeLast
会逆转这种情况并减少容量通过复制到一个新的更小的数组来改变数组?
最佳答案
否(或者至少如果是,则它是一个错误 (*))。这将违反其复杂性 promise 。
如果您阅读了append
的复杂性 promise ,它是这样的:
Complexity: Amortized O(1) over many additions. If the array uses a bridged NSArray instance as its storage, the efficiency is unspecified.
“在许多加法上摊销 O(1)”意味着对于任何给定的操作,它可能不是 O(1),但随着元素数量趋于无穷大,极限是 O(1),因为越来越大的预将进行分配,因此重新分配将变得越来越少。
现在阅读removeLast()
的复杂性 promise :
Complexity: O(1)
那里没有地方可以隐藏重新分配(或者至少它不能“通过复制到一个新的更小的数组”来实现)。
(*) 对此有一个困难的异常(exception)。阵列上的任何突变都可能受到写时复制的影响。这意味着如果与另一个数组共享存储空间,任何 突变,无论其性能 promise 如何,都可能变为 O(n)。这使得关于 Swift 性能的推理非常具有挑战性,但并不特定于这个问题。
关于arrays - `removeLast` 会 swift 减少数组的容量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41004508/
我知道 .append 偶尔会增加数组的容量并形成数组的新副本,但 .removeLast 会逆转这种情况并减少容量通过复制到一个新的更小的数组来改变数组? 最佳答案 否(或者至少如果是,则它是一个错
调用 removeLast 非常慢(弹出 77k 元素需要几分钟)。 documentation说 O(1),我认为实现只会减少数组大小。显然不是: 为什么调用 remove(at: Int)? 这个
当我尝试运行这段代码时: QStringList foo; foo << "bar"; QString last; last = foo.takeLast(); qDebug() << last; f
Swift 中 Array 的 removeLast() 和 popLast() 方法有什么区别?他们在做同样的事情,删除并返回数组的最后一个元素。谁能告诉我什么时候使用什么? 最佳答案 这两个方法来
ArrayDeque docs声明push(E)与 addFirst(E) 相同,和pop()与 removeFirst() 相同. 我认为使用 addLast(E) 可以达到相同的效果+ remov
我是一名优秀的程序员,十分优秀!