在 Java 中何时使用列表而不是数组?

2023-12-07

在Java中,什么时候优先使用List而不是Array?


我认为这个问题是相反的——

什么时候应该使用数组而不是列表?

只有您有特定的理由才这样做(例如:项目限制、内存问题(这并不是一个很好的理由)等)

列表更容易使用(我认为)并且具有更多功能。

注意:您还应该考虑诸如 Set 之类的数据结构或其他数据结构是否比 List 更适合您想要执行的操作。

每种数据结构和实现都有不同的优缺点。选择那些擅长您需要做的事情的人。

如果您需要 get() 对于任何项目都是 O(1) ?可能使用 ArrayList,需要 O(1) insert()?可能是一个链接列表。需要 O(1) contains() 吗?可能是一个哈希集。

TLDR:每种数据结构都擅长某些事情,而另一些事情则很糟糕。查看您的目标并选择最适合给定问题的数据结构。

Edit:

没有注意到的一件事是你最好声明变量 作为它的接口(即列表或队列)而不是它的实现 班级。这样,您可以在以后更改实施 无需更改代码中的任何其他内容。

举个例子:

List<String> myList = new ArrayList<String>(); 

vs

List<String> myList = new LinkedList<String>();

请注意,两个示例中的 myList 都是一个列表。 --R·贝姆罗斯

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中何时使用列表而不是数组? 的相关文章

随机推荐

  • 比较 HTTP 和 FTP 传输文件的方法

    通过 Internet 传输文件时 其中一种方法相对于另一种方法有哪些优点 或限制 我知道这两种协议的安全形式 我想听听个人经验在性能 可靠性 文件大小限制等方面的比较 这是一个性能比较两者之中 HTTP 对于小文件的请求响应响应速度更快
  • Pandas 列值到列? [复制]

    这个问题在这里已经有答案了 我已经看到了将 Pandas 数据框的列 系列分解为多个列的主题的一些变体 但我一直在尝试做一些事情 但现有的方法并没有真正成功 给定一个像这样的 DataFrame key val id 2 foo orang
  • 检查 iOS 中图像中是否存在子图像[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有 2 个图像 即较小的图像和较大的图像 现在 我想检查较小的图像是否是较大的图像的一部分 或子图像 我不知道如何检查 我想在 iOS 中实现这一切 经过一番研究后 我发现使用
  • 两个div,一个固定宽度,另一个,其余

    我有两个 div 容器 虽然一个需要特定的宽度 但我需要调整它 以便另一个 div 占据剩余的空间 我有什么办法可以做到这一点吗 left float left width 83 display table cell vertical al
  • 我可以在 PHP 中重载方法吗?

    Example 我想要有两个不同的构造函数 并且我不想使用 func get arg 因为这样就看不到可能的参数了 写其中两个是否合法 例如 class MyClass public function construct do someth
  • 方法定义和对象的函数属性之间的区别

    这是我的代码 const x a console log a b function console log b 之间有区别吗a b功能 我在某处读到 a 创建方法的方式较短 但会带来一些问题 仅在您确定永远不会使用递归或将函数传递给事件处理
  • php:是否有充分的理由引用所有数组键/索引?

    我正在运行别人的代码 他们不断地避免转义他们的数组键 例如 row rsCatalogsItems 名称 代替 row rsCatalogsItems 名称 所以我不断地对我接触到的一切做出微小的改变 只是为了应对那一点懒惰 但现在我想知道
  • Matlab条形图:更改条形图的颜色以及条形图和轴之间的间距

    我有一个棘手的问题 我认为不能简单地回答 我有一个很大的数据表 想要保存每两个相应平均值的条形图 我已经使用 for循环 做到了这一点 但我无法为我的条形图设置不同的颜色 也无法在条形图和轴之间设置适当的间距 这是最简单的例子 k 2 5
  • 如何自定义UIPickerView高度?

    如何自定义 UIPickerView 的高度 我希望它比250高 我已完成以下操作 但无法设置给定高度 void pickerview id sender pickerView UIPickerView alloc initWithFram
  • 为什么 __getattr__ 能够在 Python 2.x 中处理内置运算符重载,但不能在 Python 3.x 中处理?

    在 python 2 x 中 采用以下类 class Person def init self name self name name def myrepr self return str self name def getattr sel
  • 初始化对象时,{0} 是什么意思?

    When 0 用来初始化一个对象 什么意思呢 我找不到任何参考资料 0 任何地方 并且由于花括号 谷歌搜索没有帮助 示例代码 SHELLEXECUTEINFO sexi 0 what does this do sexi cbSize siz
  • Selenium:如何将值从field1复制到field2?

    我们正在 Firefox 中使用 Selenium IDE 录制测试 我们需要将值从只读字段复制到输入字段 有没有直接的方法可以引用该字段 或者我是否必须存储和使用它 举个例子就太好了 Thanks 您将需要两个命令 一个用于存储 一个用于
  • Java 创建新的 ObjectInputStream 块

    我正在尝试使用从 Socket 检索的 InputStream 创建一个新的 ObjectInputStream 这是我的代码 这是我的 MessageGetterSender 类的构造函数 程序未到达检查点 4 public Messag
  • Symfony2实体注释中的可配置参数

    我正在尝试跨多个数据库 其中一个属于遗留应用程序 创建一个联接 如教义博客 但是 该示例建议将数据库名称直接硬编码到模式中 出于显而易见的原因 我想避免这样做 有没有办法读取定义的参数parameters ini or config yml
  • LD_PRELOAD可以用来加载不同版本的glibc吗?

    角色阵容 big old app链接到旧版本glibc say glibc 2 12 我无法做任何事情来改变这一点 cute new addon o链接到较新的版本 glibc 2 23 This glibc 2 23位于非标准路径中 因为
  • 是否可以用交替的垂直列填充 DataGridView?

    我需要显示混合 硬编码 字符串和数据库中的数据的数据 具体来说 每个偶数列都包含不是来自数据库的字符串值 每个奇数列都包含数据 例如 第 1 列将包含数据库中的值 1 到 12 因此前两列看起来像这样 并且相同的模式重复多次 00 00 B
  • 如何修复nodejs抛出错误; ^ 错误:ENOENT:没有这样的文件或目录,请打开

    这就是我的输出的样子 我从以前的类似问题中用尽了很多方法 但没有一个对我的情况有效 我对 Node js 非常陌生 所以任何建议都会非常有帮助 C Users pushp Desktop factor gt snarkjs help int
  • Renderscript c风格指针使用性能问题

    在渲染脚本中 我使用绑定指针来迭代大图像 问题在于数组访问性能 for int i 0 i lt channels i sum input i input size mulValue 例如 当 input size 为 12288 时 完成
  • Cocoa 中的 XML-RPC 服务器

    我需要在 iPhone 上创建一个 XML RPC 服务器用于测试目的 有我可以利用的图书馆吗 查看eczarny xmlrpc在 github 上 它带有一个测试服务器
  • 在 Java 中何时使用列表而不是数组?

    在Java中 什么时候优先使用List而不是Array 我认为这个问题是相反的 什么时候应该使用数组而不是列表 只有您有特定的理由才这样做 例如 项目限制 内存问题 这并不是一个很好的理由 等 列表更容易使用 我认为 并且具有更多功能 注意