Java / Android什么比ArrayList快?

时间:2011-11-30 10:58:15

标签: java android

什么比Java中的ArrayList<String>更快?我有一个未定义长度的列表。 (有时4件,有时100件)。

从任何列表添加和获取它的最快方法是什么? arrayList.add(string)get()非常慢。

有更好的方法吗? (string s[]然后copyArray是最慢的?)

6 个答案:

答案 0 :(得分:5)

更快的是什么?

“基本上arraylist.add(字符串)和get()非常慢。” - 根据什么证据?和什么相比? (这里不需要'基本'这个词 - 它是一个高科技“嗯”。)我怀疑ArrayList是你的应用程序的问题。分析你的代码是告诉你是否只是猜测和掌握稻草的唯一方法。

如果数据集很小,即使是O(n ^ 2)的算法也可能就足够了。

您必须了解不同数据结构的Big-Oh行为才能回答这个问题。添加到ArrayList的末尾非常快,除非您必须调整它。在中间添加可能需要更长时间。

在中间添加LinkedList会更快,但你必须迭代才能获得特定的元素。

答案 1 :(得分:2)

add()到列表末尾和get()都应该在O(1)中运行。由于长度未定义,因此不能使用固定长度的数组。你害怕你做得更好。

add(int index, E element)在最坏的情况下需要线性时间,但如果这就是你觉得它很慢的原因。如果是这种情况,请使用Hashtable(插入需要恒定时间)或TreeMap(插入需要对数时间)。

答案 2 :(得分:2)

100项不是很多。你的瓶颈在其他地方。

答案 3 :(得分:1)

看看Jodd Utilities。它们有一些集合实现了ArrayList,但是在primatives(jodd / util / collection /)上,例如IntArrayList。因此,如果你正在创建一个int,float,double等的ArrayList,它会更快并且消耗更少的内存。

比这更快的是他们称之为FastBuffer,它在add()方面表现优异,并且可以在O(1)处提供get()。

这些类几乎没有相互依赖性,因此很容易将所需的类放入代码中。

答案 4 :(得分:0)

答案 5 :(得分:-4)

尝试使用哈希表它会快得多