- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
很久以前看了普林斯顿Coursera MOOC的视频讲座:算法导论,可以找here .它解释了在向结构中添加或删除元素时调整类似结构的 ArrayList
的成本。事实证明,如果我们想为我们的数据结构提供大小调整,我们将从 O(n)
到 amortized O(n)
for add
和 remove
操作。
我已经使用 Java ArrayList
几年了。我一直确信它们会自动增长和收缩。直到最近,令我非常惊讶的是,我在 this post 中被证明是错误的. Java ArrayList
不会自动收缩(尽管它们当然会增长)。
这是我的问题:
在我看来,在 ArrayList
中提供收缩不会造成任何损害,因为性能已经摊销 O(n)
。为什么 Java 的创建者没有在设计中包含这个特性?
我知道 HashMap
等其他数据结构也不会自动收缩。 Java 中是否还有其他构建在支持自动收缩的数组之上的数据结构?
其他语言的趋势是什么?在 Python/C# 中的列表、字典、映射、集合等情况下,自动收缩看起来如何。如果它们与 Java 的方向相反,那么我的问题是:为什么?
最佳答案
评论已经涵盖了您要问的大部分内容。这里有一些关于你的问题的想法:
在 Java 中创建类似 ArrayList
的结构时,开发人员会就运行时/性能做出某些决定。他们显然决定将收缩排除在“正常”操作之外,以避免需要额外的运行时间。
问题是您为什么要自动收缩。 ArrayList
不会增长那么多(确切地说,该因子约为 1.5;newCapacity = oldCapacity + (oldCapacity >> 1)
)。也许您也可以在中间插入,而不仅仅是在末尾追加。那么 LinkedList
(不是基于数组 -> 不需要收缩)可能会更好。这实际上取决于您的用例。如果您认为您确实需要 ArrayList
所做的一切,但在删除元素时它必须缩小(我怀疑您真的需要这个),只需扩展 ArrayList
并覆盖这些方法。不过要小心!如果您在每次删除时都收缩,您将回到 O(n)
。
C# List
和 C++ vector
在删除元素时收缩列表的行为相同。但自动增长的因素各不相同。甚至一些 Java 实现也使用不同的因素。
关于java - 为什么 Java ArrayLists 不会自动收缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41933700/
我对 ScalaCheck(以及整个 Scala)相当陌生,所以这可能是一个相当简单的解决方案 我正在使用 ScalaCheck 为 AST 生成测试并验证编写器/解析器是否工作。我有这些文件 AST
我首先创建一个特定大小的 JTextArea。用户可以在其中添加文本,但如果它变得太长(垂直或水平),它将被截断。我希望 JTextArea 自动扩展或收缩(用于删除文本)。 我将来可能会允许用户更改
我正在学习如何在浏览器更改大小时调整 div 元素的大小。我希望我的 slider (参见 Fiddle)始终显示 10 张幻灯片,即使浏览器变小(参见下图)也是如此。 目标: 我能想到的实现这一点的
嗨,我在使用 css 面板时遇到了一些问题,我有点想寻求帮助,我的代码运行良好,但是如果用户让浏览器缩小尺寸,面板就会出现在文本下面,这就是我的意思意思是: 这是正常浏览器大小下的样子: 如果用户将浏
我正在研究和实现事件轮廓的贪婪算法,如 Donna Williams 的论文 - 事件轮廓和曲率估计的快速算法中所述。 与另一种实现(Kass 等人的实现)相比的优势之一应该是沿等高线曲线的点均匀分布
在 PHP 中,如何复制 tinyurls 的扩展/收缩功能,就像在 search.twitter.com 上一样? 最佳答案 如果你想找出一个 tinyurl 的去向,使用 fsockopen 在端
有java.io.ZipInputStream膨胀和java.io.ZipOutputStream这会泄气。 但有时我不希望这样。有时,当使用接受 InputStream 的第三方 API 时,我想要
我试图做到这一点,以便在选择文件后,显示文件路径的文本字段会自动收缩/扩展以适合路径。 JFileChooser fileChooser = new JFileChooser(); if (fileC
我有两个 flexbox,它们在高度变化时收缩,嵌套内容重叠。 如何防止这种情况? 最佳答案 just add flex-shrink:0 to your element and the flexbo
想要逐渐“打开”和“关闭”表格中的行,适本地向下推或拉起下面的行。 我能够通过使用 transition 进行计时和使用 transform 进行大小调整来使 div 扩展/收缩(无法使用 heigh
我有一个10列24行的表,可以存储一个值,也可以是=0。它们被称为msg1,msg2...直到msg10。我正在编写一个查询,用 0 而不是任何字段中的特定值来更新此表。 所以我写了(59是一个测试值
有谁知道缩小/压缩 db4o 数据库的方法吗? 最佳答案 压缩/收缩是什么意思?缩小现有数据库?还是要压缩数据库? 其中一个角色是 defragmentation .这将释放数据库中未使用的空间。删除
我正在使用 flexbox 来布局页面,因为 growing 行为很有用。但我想完全防止收缩行为。 无论如何要管理这个? 示例代码: This one should gr
我是 jQuery/Javascript 的新手,甚至是通过缩小的 jQuery/Javascript 进行搜索的新手。 我正在尝试重新创建我在 Materialize 框架的表单组件中找到的一些功能
我有一个对象表及其类型,如下所示: objectType | object 107 Boeing 107 Airbus 323 Audi 323
我正在尝试使用以编程方式构建的 TableLayout 将 20x20 表格放入 View 中。 setStretchAllColumns/setShrinkAllColumns 方法非常适合压缩所有
我有一个 QDialog 和一个 QVBoxLayout 控制它的高度。 这个主要的 QVBoxLayout 由一个或多个 QVBoxLayout child 组成,后面是一些其他小部件。当我添加额外
如何缩小任意(未指定)宽度的居中图像周围的 anchor (绿色边框)?换句话说,我想要绿色边框居中的秒框,就像第一个一样。没有 float ,没有绝对定位。 移除行 (A) 中心,但 anchor
我正在制作一款安卓游戏。我在 Galaxy sII 上测试我的应用程序。我取得了很大进步。不幸的是,我忽略了对其他设备进行测试。我知道我会遇到不同类型设备的不同分辨率问题。但我认为我可以通过安排我的坐
如果 GUI 设计人员使用特定设备屏幕尺寸作为引用点提供 iOS 设计,那么如果应用程序在不同设备上运行,如何使字体扩展或收缩? 即假设设计者提供了一个以 iPhone 8 屏幕尺寸为引用的单一设计,
我是一名优秀的程序员,十分优秀!