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

68 浏览
0 Comments

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

我需要在Java中顺序访问成千上万个字符串,应该将它们存储在数组中还是使用某种类型的列表?由于数组将所有数据存储在连续的内存块中(不像列表),使用数组存储数千个字符串是否会导致问题?

admin 更改状态以发布 2023年5月22日
0
0 Comments

Java的编程方式是要考虑哪种数据抽象最适合你的需要。记住,在Java中,List是一个抽象的数据类型,而不是一个具体的数据类型。你应该声明字符串为一个List,并使用ArrayList的实现来初始化它。

List strings = new ArrayList();

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

ArrayList使用数组作为底层实现来实现List抽象数据类型。访问速度几乎与数组相同,并且具有可以添加和删除List元素的附加优点(虽然使用ArrayList是一个O(n)操作),如果你决定以后更改底层实现,你可以这样做。例如,如果你意识到需要同步访问,可以将实现更改为Vector,而无需重新编写所有代码。

实际上,ArrayList专门设计来在多数情况下替代低级别的数组构造。如果Java今天重新设计,完全可能会放弃使用数组,而采用ArrayList构造。

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

在Java中,所有集合仅存储对象的引用,而不是对象本身。数组和ArrayList都将在连续的数组中存储几千个引用,因此它们基本上是相同的。你可以考虑,在现代硬件上,几千个32位引用的连续块将总是容易得到。当然,这并不能保证你不会完全耗尽内存,只是连续内存块的需求不难满足。

0
0 Comments

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

我的个人意见是你应该使用列表。

我在一个大型代码库中工作,之前的开发人员团队到处都使用数组。它使得代码非常不灵活。将大块代码更改为列表后,我们没有注意到速度上的任何差异。

0