我有一个方法,它接受字符串的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条答案
按热度按时间fcwjkofz1#
在java中,数组的大小是固定的,所以不可能通过添加新元素来扩展数组。
你需要创建一个更大的新数组,并将第一个元素复制到其中,然后向其中添加新元素,但它还不是动态的。
我的建议是使用**
Collection
也许是ArrayList,您将受益于其内置方法,如.add()
**0s0u357o2#
没有简单的方法将数组扩展一个元素并添加新元素。但是如果你使用的是列表,你可以很容易地添加一个新元素,然后在调用方法时将其转换为数组:
字符串
如果你认为你将有一个长期的需要,那么也许可以考虑改变
count()
的实现,使用一个列表而不是数组。你也可以重载这个方法,并公开一个接受列表而不是数组的版本。