user63898:
私は、文字列リストの引数を持つ関数を持っていると私は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()]));
}
あなたは、可変引数の配列を必要としない場合は、リスト<>引数を使用することができます。別のリストに新しい要素を挿入するためには良い形になります。呼び出し側が非修正可能なリストを提供することができる、またはそのリストが変更されたくないかもしれません。
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 );
}