当前位置: 首页 > 知识库问答 >
问题:

Java-列表还是数组?[副本]

刁文光
2023-03-14

我知道列表在Java中比使用硬设置数组更容易(列表允许您随意添加/删除元素,并自动调整大小,等等)。

我读过一些文章,建议尽可能避免在java中使用数组,因为它们一点也不灵活(有时会施加奇怪的限制,例如如果您不知道数组需要的大小,等等)。

这是停止使用数组而只使用列表逻辑的“良好实践”吗?我确信列表类型比数组消耗更多的内存,因此具有更高的开销,但这是否重要?大多数列表在运行时都会被GC’ed,如果它们被放在任何地方,那么也许这并不像我想的那么重要?

共有3个答案

白念
2023-03-14

这取决于名单。LinkedList可能仅在需要时占用空间,而ArrayList通常在达到容量时会大大增加其空间。在内部,ArrayList是使用数组实现的,但它是一个总是比您想要的大的数组。然而,由于它存储的是引用,而不是对象,所以在大多数情况下,内存开销可以忽略不计,我相信这种方便是值得的。

王骏
2023-03-14

我认为一个很好的经验法则是使用List,除非您需要一个Array(出于内存/性能原因)。否则,列表通常更容易维护,因此不太可能导致未来的错误。

列表在自动扩展方面提供了更多的灵活性/功能,所以除非您需要内存(并且负担不起列表创建的开销)或者不介意在数组扩展/收缩时保持其大小,否则我建议使用列表。

尽量不要对代码进行过多的微观管理,而是专注于更可识别和可读的组件。

齐驰
2023-03-14

我不喜欢教条。知道规则;知道什么时候打破规则。

“从不”太强了,尤其是在软件方面。

数组和列表都是GC的潜在目标,所以这是一个清洗。

是的,在开始之前你必须知道数组的大小。对于你这样做的情况,没有什么错。

使用java很容易根据需要来回切换。util。集合java。util。数组类。

 类似资料:
  • 问题内容: 我对Redis的所有可用存储选项有些困惑。我想做一些简单的事情,我不想过度设计。我正在与和合作。 我有一个需要存储的简单关联数组。我还需要能够通过其键检索一个项目并遍历所有项目。 所以到目前为止,我一直在使用type。像这样存储我的数组: 这样,我可以像这样轻松访问密钥: 但是现在我需要遍历所有我不知道如何做的帖子,以及是否可以使用我当前的结构来完成。我不知道是否需要将所有内容存储在另

  • 编辑:我的问题是ListView有没有比RecyclerView更有优势的地方?如果不是,那么为什么谷歌没有将它标记为贬值。此外,虽然我们可以在库中找到ListView,但如果我们创建了一个新的Project,但要使用RecyclerView,则必须使用另一个依赖项。

  • 数组在Java中不是一种基元类型,但它们也不是对象,那么它们是通过值传递还是通过引用传递呢?它是否取决于数组包含什么,例如引用或基元类型?

  • 有人告诉我构造函数复制是一种浅层复制方法。 通常情况下,如果我修改了List ints的第一个元素,那么List intscope中的相应元素应该已经修改为31了,对吗?因为变量intscope和ints引用了同一个对象,但我得到了这个输出。 举个例子,我的意思是: 我得到这样的输出: 因为变量arr和arr2引用了同一个对象。如果我修改了数组中的一个元素,那么其他元素也会产生影响。当我使用列表进

  • 我是Java和Stack Overflow的新手,我有一个关于排列的问题。 方法:我使用中的对象生成。每个的大小从(可能最小为1)到,并包含具有唯一名称属性的自定义生成对象。 问题:现在我的问题是如何在我的外部(y轴)中获得从第一个到最后一个的所有可能对象组合的排列(我想我们可以说这是x轴)? 我试着举一个简单的例子: : 1.1|1.2|1.3 : 2.1 : 3.1|3.2 这里,这些位于外部

  • 问题内容: 以下哪项将被认为是更好/更清晰/更快/更多的“ Pythonic”?我不在乎列表的内容,只关心它的持续时间。 要么 如果有什么不同,该函数也会利用。 问题答案: 一些快速的计时运行似乎使第二个选项略有优势: 只是为了好玩而已(Python v2.7.2) 我希望 首先 使用 可读代码 ,然后使用(如果可用)(例如,Python 3.x之前的版本),然后使用和。

  • 问题内容: 用Java制作数组列表的语法是什么? 我尝试了以下方法: 还有很多其他事情 我需要能够对int数组进行重新排序,但是int数组的元素不需要更改。如果这不可能,为什么呢? 谢谢。 问题答案: 首先,您不能做的是接口。 要列出int数组,请执行以下操作: PS 根据评论,List的包和ArrayList的包

  • 我有一个数组列表,其中包含我想要执行方法“计数”的实例化对象的名称。不过,我不确定是否/如何做到这一点。我有一个循环要扫描数组列表,并添加了伪代码。 我是java新手,不确定这是否可行,但如果有任何帮助,我将不胜感激。谢谢