2013-11-01 28 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个项目,那么目前没有担心这个问题。过早优化是邪恶的。 :)

相关问题