数组比ArrayList更快吗?

13 浏览
0 Comments

数组比ArrayList更快吗?

我直觉上认为数组比ArrayList更快,因为ArrayList是使用会在填充/失去元素时调整大小的数组来实现的。

我只是想确认一下这是否正确,也就是说,如果你知道要保存的元素数量,那么就没有理由使用ArrayList。

0
0 Comments

数组是否比ArrayList更快?

正如其他人已经提到的,除非性能测试显示它是一个瓶颈,否则请使用ArrayList。是的,由于访问开销的原因,存在性能差异,但通常来说这差异不会很大。唯一的例外是,如果你在ArrayList中存储原始类型,那么性能会受到显著影响,因为它会将对象转换为原始类型,并进行相应的转换。

解决方法是使用原始类型的数组,而不是ArrayList。原始类型的数组在处理原始类型数据时更快。下面是一个示例:

// easier to work with but slow
ArrayList slowList;
// faster primitive data array
double[] fasterList;

在这个示例中,如果需要处理原始类型的数据,并且性能是一个关键因素,那么使用原始类型的数组会更加快速。

0
0 Comments

数组和ArrayList都是在Java中用来存储和操作数据的数据结构。数组是一种固定大小的数据结构,它可以在内存中连续存储多个相同类型的元素。ArrayList是一种动态大小的数据结构,它可以根据需要自动调整大小。

在讨论数组和ArrayList哪个更快的问题时,有几个潜在的原因可以解释为什么会出现这个问题。首先,数组在内存中是连续存储的,而ArrayList在内存中是分散存储的。这可能会导致数组在访问和操作元素时更快。其次,数组不需要额外的内存来维护其大小,而ArrayList需要额外的内存来动态调整大小。这可能会导致ArrayList在内存使用方面比数组更慢。

然而,实际上,数组和ArrayList之间的性能差异是可以忽略不计的,尤其是如果您在初始化ArrayList时指定了初始容量。因此,编写代码时应该以使其最易于阅读和维护为目标,而不是优化这种微小的性能差异,除非经过测试确定从中获得了显著的性能损失。

使用ArrayList的潜在原因有几个。首先,ArrayList提供了一些有用的方法(例如contains等),使得操作和查询数据更加方便。其次,ArrayList实现了Iterable、Collection和List接口,因此可以在许多基于接口的API调用中使用。最后,即使您当前“知道”您的集合的大小永远不会改变,但生活总会给我们带来意想不到的要求。为什么要将自己限制在一种模式中,当没有明显的优势可获得时呢?

有人表示性能永远不可忽略。这是因为CPU的运行速度是以每秒钟的周期数来衡量的。当我们说一个CPU是2GHz时,意味着它每秒可以执行20亿次数学运算,或者换句话说,CPU每两十亿分之一秒执行一次“周期”。因此,这名用户开玩笑说他的代码需要多少个这样的“周期”,他就可以得到相应的报酬。

总结起来,虽然数组和ArrayList在某些方面可能存在性能差异,但在大多数情况下,这些差异是可以忽略的。因此,编写代码时应该以可读性和可维护性为主,并且只有在经过测试确定存在显著性能损失时才进行优化。同时,使用ArrayList可以提供一些方便的方法和更大的灵活性。性能虽然重要,但也不应该成为牺牲代码可读性和可维护性的代价。

0
0 Comments

原因:

- ArrayList具有比原始数组更多的功能,例如可以根据元素数量创建指定大小的ArrayList。

- 对于ArrayList和数组之间的速度差异担心是多余的,它很可能不是代码中的瓶颈。如果是瓶颈,几乎肯定有比更改为数组更好的解决方案。

- 过早优化会对代码造成严重破坏。大多数事情都不重要,只有少数几件事情是重要的。只有通过对代码进行分析,才能找到那些重要的事情。试图使每个部分都快速是使整个代码变得快速的一种非常低效的方法。保持一个干净、简单的设计更加有效。这将为您提供必要的接缝,以在实际需要的一两个地方引入优化。

解决方法:

- 不要过早优化,而是通过对代码进行分析来确定优化的关键点。

- 保持代码设计的简洁和清晰,而不是试图在每个部分都优化。

- 使用ArrayList时,根据需要设置初始大小,以避免不必要的扩展操作。例如:new ArrayList<String>(100);

- 如果在某些情况下数组的性能更重要,可以考虑使用原始数组,但在大多数情况下,ArrayList提供的功能和灵活性更有优势。

0