为了账号安全,请及时绑定邮箱和手机立即绑定

数组或列表在Java中。哪个更快?

数组或列表在Java中。哪个更快?

喵喵时光机 2019-06-20 16:25:49
数组或列表在Java中。哪个更快?我必须将数千个字符串保存在内存中,才能在Java中进行串行访问。我应该将它们存储在数组中,还是应该使用某种列表?由于数组将所有数据保存在一个连续的内存块中(与列表不同),使用数组存储数千个字符串会导致问题吗?
查看完整描述

4 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

我建议您使用分析器来测试哪个更快。

我个人的看法是你应该使用列表。

我处理一个大型代码库,之前的一组开发人员使用数组。处处..这使得代码变得非常不灵活。在将它的大块更改为列表后,我们注意到速度没有差别。


查看完整回答
反对 回复 2019-06-20
?
呼如林

TA贡献1798条经验 获得超3个赞

Java的方法是,您应该考虑哪些数据抽象化最适合你的需要。请记住,在Java中,列表是抽象的,而不是具体的数据类型。应该将字符串声明为列表,然后使用ArrayList实现对其进行初始化。

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

抽象数据类型和具体实现的分离是面向对象编程的一个关键方面。

ArrayList使用数组作为基础实现列表抽象数据类型。访问速度实际上与数组相同,它的其他优点是能够向列表中添加和减去元素(尽管这是一个带有ArrayList的O(N)操作),如果您决定稍后更改基础实现,则可以。例如,如果您意识到需要同步访问,则可以将实现更改为Vectora,而无需重写所有代码。

事实上,ArrayList是专门为在大多数情况下替换低级数组构造而设计的。如果Java是今天设计的,那么数组完全有可能被完全排除在ArrayList构造之外。

由于数组将所有数据保存在一个连续的内存块中(与列表不同),使用数组存储数千个字符串会导致问题吗?

在Java中,所有集合只存储对象的引用,而不存储对象本身。数组和ArrayList都将在一个连续数组中存储几千个引用,因此它们本质上是相同的。您可以认为,在现代硬件上,可以随时使用几千个32位引用的连续块。这并不保证您不会完全耗尽内存,当然,只是内存要求的连续块并不难完成。


查看完整回答
反对 回复 2019-06-20
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

与数组相比,您应该更喜欢泛型类型。正如其他人所提到的,数组是不灵活的,没有泛型类型的表达能力。(不过,它们确实支持运行时键入,但这与泛型类型混在一起。)

但是,与往常一样,在优化时,您应该始终遵循以下步骤:

  • 不要优化,直到你有一个好的,干净的,和

    工作

    你代码的版本。在这一步中,更改为泛型类型很有可能是有动机的。
  • 当你有一个好的和干净的版本,决定它是否足够快。
  • 如果不够快,

    衡量其性能

    ..这一步之所以重要,有两个原因。如果你不测量,你就不会(1)知道你所做的任何优化的影响,(2)知道在哪里进行优化。
  • 优化代码中最热门的部分。
  • 再量一次。

    这和以前的测量一样重要。如果优化没有改善,

    还原它

    ..记住,代码

    优化是

    干净,漂亮,工作。


查看完整回答
反对 回复 2019-06-20
  • 4 回答
  • 0 关注
  • 837 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信