当前位置: 首页 > 面试题库 >

为什么在Java中首选使用列表而不是数组?

席烨
2023-03-14
问题内容

许多人和作者建议我们使用列表而不是数组。

List <Integer> list = new ArrayList<Integer>();
list.addElement(1);
....

它背后的原因是什么?


问题答案:

通常,您应该更喜欢为工作选择正确的数据结构。您需要了解手头的任务以及所有不同的选项,以及它们如何在迭代,搜索,添加,删除和插入数据方面进行比较。通常,您需要了解数据结构如何访问和操作内存,并根据对应用程序的预期使用来选择最佳的数据结构。

显然,它并不总是很明确。但是您可以了解不同数据结构的理想选择。

例如,纯静态,固定长度的数据非常适合数组,您只需在其中进行迭代即可,而无需进行搜索。通常在密码算法中使用此类数组。如果数据是静态的,而不是进行迭代,则需要搜索,您可能需要某种类型的树结构。如果要快速插入,则散列可能是理想的选择。如果数据经常更改,则需要一种可以有效更改其大小的结构,例如列表。

当然,数据结构有许多变体和组合,旨在解决各种特定问题。之所以这么多,是因为它们在编写高效程序中发挥着重要作用。无论如何,我的观点是了解数据结构。了解每种情况的理想情况,然后就可以为任何任务决定或设计合适的数据结构。



 类似资料:
  • 问题内容: 在Scrapy docs中,有以下示例说明如何在Scrapy中使用经过身份验证的会话: 我已经做好了,很好。但是 我的问题是 :正如他们在最后一行的评论中所说,您需要做什么? 问题答案: 在上面的代码中,用于进行身份验证的将该函数设置为其回调。这意味着该函数将被调用并传递登录尝试得到的页面作为响应。 然后,通过在页面中搜索特定的字符串(在本例中为)来检查您是否成功登录。如果找到它,蜘蛛

  • 我碰巧知道,在下面的表达式中,使用将导致无限流,将始终为0。我之所以困惑是因为我认为返回的值没有被使用,即便如此,它也不应该中断之后的增量。

  • 问题内容: 这里的快速问题:为什么不总是在Java中使用ArrayLists?除了额外的有用功能之外,它们显然具有与数组相同的访问速度。我理解它的局限性,因为它不能容纳原语,但是可以通过使用包装程序轻松地减轻这种情况。 问题答案: 如果需要原始类型的集合,那么数组很可能是完成这项工作的最佳工具。装箱是比较昂贵的操作。对于将用作图元的图元集合(不包括地图),我几乎总是使用数组来避免重复装箱和拆箱。

  • 问题内容: 我一直在阅读Go,并为这个基本问题感到困惑。 在Go中,很明显,切片更灵活,并且在需要一系列数据时通常可以代替数组使用。 阅读了大多数文档,他们似乎鼓励开发人员只使用切片而不是数组。我得到的印象是,创建者可以简单地将数组设计为可调整大小的,而无需整个切片部分即可完成。实际上,这样的设计会使该语言更易于理解,甚至鼓励使用更多惯用的代码。 那么,为什么创建者首先要允许数组呢?什么时候可以使

  • 问题内容: 在Java中,何时优先使用列表而不是数组? 问题答案: 我认为问题是相反的- 什么时候应该在列表上使用数组? 只有您有特定的理由这样做(例如:项目约束,内存问题(不是很好的理由)等) 列表更易于使用(imo),并且具有更多功能。 注意:您还应该考虑是否像Set或其他数据结构这样的东西比List更适合您要尝试的工作。 每个数据结构和实现都有不同的优点/缺点。选择在您需要做的事情上表现出色

  • 很多人问了此问题,说bzero已经被posix-2008废弃,为何还使用bzero。选择bzero而不是memset,有2个原因: bzero有2个参数,指针和长度,很明确就是将制定size的内存初始化为0。而memset有3个参数,需要记忆参数的位置,有不少人经常把长度和初始化值搞错。 bzero比memset的可读性要好。memset可以制定初始化的值,实际上绝大多数情况都是0。 一旦新版本g