2013-11-01 29 views
0

我有一個名爲myStrings的字符串[]。我不能將它轉換爲其他任何東西,它必須保留一個字符串數組。不過,我需要再添加一個字符串,所以我寫了這個方法。我確信有一個更好,更快,更少內存密集的方式來做到這一點,但我看不到它。任何人都可以提供一個java api唯一的方式來解決這個問題比我更好嗎?我使用Java 1.7將字符串添加到此字符串數組的最有效方法是什麼?

String[] myStrings; // this gets set to real values later in program. 

public void addToMyStrings(String addMe){ 
    List<String> list = Arrays.asList(myStrings); 
    if(list != null) 
    { 
     list.add(addMe); 
     myStrings = list.toArray(new String[0]); 
    } 
} 
+0

你爲什麼使用這種扭曲的邏輯? – Lokesh

+0

爲什麼不使用'ArrayList'? –

+0

基於「我需要再添加一個字符串」,它聽起來像是在熱修補您正在遇到的問題。請詳細說明你爲什麼決定這麼做。 –

回答

4

您不能將項目添加到由Arrays.asList(..)返回List<T>

返回固定大小的列表中指定數組支持。 (對返回列表進行「直寫」到數組的更改。)此方法充當基於數組和基於集合的API之間的橋樑,並結合使用Collection.toArray()。

你可以使用一個分開的List你從數組手動構建,或直接只使用Arrays

String[] newStrings = Arrays.copyOf(myStrings, myStrings.length()+1); 
newStrings[myStrings.length()] = addMe; 
0

如果你絕對使用數組,那麼你可以模仿什麼東西如ArrayList做,並根據需要增加一倍的大小。這種方式大多數插入是非常有效的(O(1))複雜性,但每隔一段時間,您將不得不做一個完整的O(n)陣列複雜性。

0

這是不好的設計決策。如果您需要更改myStrings,那麼您需要從頭開始將其聲明爲動態列表。

如果你想保留它作爲一個固定的數組,那麼試着給它一個你知道在實例化時永遠不會被超過的大小。

如果你不能這樣做,你可以使用ArrayUtils.add(T[] array,T element)
該方法複製你的數組,並在最後添加一個項目。它應該比你的算法快,但不是太多。

出於所有實際的目的,除非看到瓶頸,否則我不會擔心性能。例如,如果你期望你的數組包含3-4個項目,那麼目前沒有擔心這個問題。過早優化是邪惡的。 :)

相關問題