Java如何在变量参数数组的开头添加插入元素?

标签 java variadic-functions

我有一个带有字符串列表参数的函数,我想在此字符串列表参数的开头插入元素,以便我可以将其作为参数传递给其他函数,现在当我尝试添加 ArrayList 但 argArr 没有这样的方法..

ArrayList.add(0,"foo");


private void A(String... argsArr)
{
   //insert element at beginning
   B(argArr); 
}
private void B(String... argsArr)
{
}

最佳答案

如果您想使用可变参数数组,您可以创建一个插入元素的新数组。例如,使用流:

private void a(String... argsArr) {
    String[] args2 = Stream.concat(Stream.of("foo"), Arrays.stream(args))
                           .toArray(String[]::new);
    b( args2 );
}

如果您愿意,您可以创建一个没有流的新数组。这是使用临时列表的简单方法。

private void a(String... argsArr) {
    List<String> newList = new ArrayList<>();
    newList.add("foo");
    newList.addAll(Arrays.asList(argsArr));

    b(newList.toArray(new String[newList.size()]));
}

如果不需要可变参数数组,则可以使用 List<> 参数。将新元素插入到不同的列表中是一种很好的形式。调用者可能会提供不可修改的列表,或者可能不希望修改其列表。

private void a2( List<String> args ) {

    List<String> newList = new ArrayList<>( args );
    newList.add(0, "foo"); // <-- Extra O(n) time to shift elements over.

    b( newList );
}

通过不在现有列表的开头插入,您可以将效率提高一个常数因子。

private void a2( List<String> args ) {

    List<String> newList = new ArrayList<>( );
    newList.add("foo"); 
    newList.addAll( args );

    b( newList );
}

关于Java如何在变量参数数组的开头添加插入元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54639628/

相关文章:

java - 如果在 Java 中将 varg 设置为 null,则获取 vargs 的类类型

c - 在 C 中使用可变参数函数进行字符串连接

使用 android + mongodb 时出现 java.net.UnknownHostException : Unable to resolve host "@MYIPADDRESS,

java - gcr.io/distroless/java :11 use base version from 11:. 0.6 到 11.0.8

由于多重对象引用而导致的java垃圾收集

java - foo(int, int) 比 foo(int...)

function - 如何定义可变参数函数

Java SafeVarargs 注释,是否存在标准或最佳实践?

java - 数组索引越界但不应该

java - 使用 XQuery 获取 XML 文件的文件名