我有一个采用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;
}
答案 0 :(得分:3)
在java中,数组具有固定的大小,因此通过向其添加新元素来扩展数组是不可能的。
您需要创建一个更大尺寸的新数组并将第一个元素复制到其中,然后向其中添加新元素,但它还不是动态。
我建议使用 Collection
可能 ArrayList ,您可以从其内置方法中获利,例如 .add()
强>
答案 1 :(得分:2)
没有简单的方法可以通过一个元素扩展数组并添加新内容。但是如果您正在使用列表,则可以轻松添加新元素,然后在调用方法时将其转换为数组:
count()
如果您认为对此有长期需求,那么可以考虑更改{{1}}的实现以使用列表而不是数组。您还可以重载此方法并公开接受列表而不是数组的版本。