2011-11-30 58 views
1

Java中的什麼比ArrayList<String>更快?我有一個未定義長度的列表。 (有時4件,有時100件)。Java/Android什麼比ArrayList更快?

什麼是最快速的方式添加並從任何列表中獲取? arrayList.add(string)get()非常緩慢。

有沒有更好的方法呢? (string s[]然後copyArray是最慢的?)

+0

我想沒有比插入和檢索通過索引數組列表更快的方式。 –

回答

5

更快爲什麼?

「基本上arraylistist.add(string)和get()非常慢。」 - 基於什麼證據?和什麼相比? (這裏不需要'基本'這個詞 - 這是一個高科技的「嗯」)。我懷疑ArrayList是你的應用程序的問題。分析你的代碼是判斷你是否只是猜測和抓住吸管的唯一方法。

即使是O(n^2)的算法,如果數據集很小,可能也足夠了。

您必須瞭解不同數據結構的Big-Oh行爲才能回答此問題。添加到ArrayList的末尾非常快,除非您必須調整它的大小。在中間添加可能需要更長的時間。

LinkedList在中間添加會更快,但您必須迭代才能到達特定元素。

+0

這是最後appenden這是非常緩慢的。我等了很長時間(幾秒鐘)來追加短數量的100個整數。那真的很慢。 – user1324936

+0

你已經等了六個月的評論?我想我已經用我的答案覆蓋了它。看到關於「除非你必須調整它」的部分?也許你需要考慮你的初始規模和調整行爲。 – duffymo

2

兩個add()結束列表和get()應在O(1)運行。由於長度未定義,因此不能使用固定長度的數組。恐怕你無法做得更好。

add(int index, E element)需要線性時間的最壞情況,但如果這就是爲什麼你認爲它很慢。如果是這種情況,可以使用Hashtable(插入需要一定的時間)或TreeMap(插入需要對數時間)。

1

看一看的Jodd Utilities。他們有一些實現ArrayList但是在primatives(jodd/util/collection /)上的集合,比如IntArrayList。所以如果你正在創建一個int,float,double等ArrayList,它會更快,消耗更少的內存。

速度甚至比這就是他們所謂的FastBuffer,(),它擅長的附加,可以在澳提供一個get()(1)。

這些類幾乎沒有相互依賴性,所以很容易將您需要的類放入代碼中。

2

100個項目不是很多。你的瓶頸在別處。