从现有数组创建一个数组,并添加其他元素

时间:2017-07-05 08:01:56

标签: java arrays variadic-functions

我有一个采用vararg字符串数组的方法

void count(long delta, String... tags);

对于大多数情况,我有一个预定义的标签数组

String[] tags = { "foo_tag:Foo",
                  "bar_tag:Bar",
                  "baz_tag:Baz"
                };

并且每个调用"project_id:12345"

中只有一个标记要添加到预定义标记中

所以count的调用应该是这样的:

count(delta, "foo_tag:Foo", "bar_tag:Bar", "baz_tag:Baz", "project_id:12345");

我怎样才能简单地创建一个包含现有单元加上附加元素的新数组,而不是调用该方法?

像这个假设的Arrays.append方法:

count(delta, Arrays.append(tags, "project_id:12345"));

这是存储统计操作,而不是业务逻辑,因此我希望此操作尽可能快 目前,我有辅助方法appendTag,但它看起来并不优雅

private String[] appendTag(String[] tags, String s)
{
    String[] result = new String[tags.length + 1];
    System.arraycopy(tags, 0, result, 0, tags.length);
    result[result.length-1] = s;
    return result;
}

2 个答案:

答案 0 :(得分:3)

在java中,数组具有固定的大小,因此通过向其添加新元素来扩展数组是不可能的。

您需要创建一个更大尺寸的新数组并将第一个元素复制到其中,然后向其中添加新元素,但它还不是动态

我建议使用 Collection 可能 ArrayList ,您可以从其内置方法中获利,例如 .add()

答案 1 :(得分:2)

没有简单的方法可以通过一个元素扩展数组并添加新内容。但是如果您正在使用列表,则可以轻松添加新元素,然后在调用方法时将其转换为数组:

count()

如果您认为对此有长期需求,那么可以考虑更改{{1}}的实现以使用列表而不是数组。您还可以重载此方法并公开接受列表而不是数组的版本。