将字符串添加到此字符串数组的最有效方法是什么?

时间:2013-11-01 15:12:09

标签: java arrays string memory-efficient

我有一个名为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] );
    }
}

3 个答案:

答案 0 :(得分:4)

您无法将项目添加到List<T>返回的Arrays.asList(..)

  

返回由指定数组支持的固定大小列表。 (对返回列表的更改“直写”到数组。)此方法充当基于数组和基于集合的API之间的桥梁,与Collection.toArray()结合使用。

您可以使用从阵列手动构建的单独List,也可以直接使用Arrays

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

答案 1 :(得分:0)

如果您绝对 使用数组,那么您可以模仿ArrayList的功能,并根据需要将其大小加倍。这样,大多数插入都非常有效(O(1))的复杂性,但每隔一段时间你就不得不进行O(n)复杂度的完整阵列复制。

答案 2 :(得分:0)

这是糟糕的设计决定。如果您需要更改myStrings,则需要从头开始将其声明为动态列表。

如果你想把它保存为固定绑定数组,那么试着给它一个你知道在实例化时永远不会超过它的大小。

如果您无法这样做,可以使用ArrayUtils.add(T[] array,T element)
该方法复制您的数组并在最后添加一个项目。它应该比你的算法快,但不是很多。

出于所有实际目的,除非我看到瓶颈,否则我不会担心性能问题。例如,如果您希望您的阵列包含3-4个项目,那么暂时不用担心这一点。过早优化是邪恶的。 :)