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] );
    }
}
4

3 回答 3

4

您不能将项目添加到List<T>返回者Arrays.asList(..)

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

List您可以使用手动从数组构建的分隔符,也可以直接使用Arrays

String[] newStrings = Arrays.copyOf(myStrings, myStrings.length()+1);
newStrings[myStrings.length()] = addMe;
于 2013-11-01T15:17:23.727 回答
0

如果您绝对必须使用 Array,那么您可以模仿 ArrayList 所做的事情,并根据需要将其大小加倍。这样,大多数插入都是非常有效的(O(1))复杂度,但每隔一段时间你就必须做一个 O(n)复杂度的完整数组复制。

于 2013-11-01T15:16:09.520 回答
0

这是一个糟糕的设计决策。如果你需要改变myStrings,那么你需要从一开始就将其声明为动态List。

如果您想将其保留为固定绑定数组,请尝试给它一个您知道在实例化时永远不会超过的大小。

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

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

于 2013-11-01T15:31:03.817 回答