可変引数配列の先頭に挿入要素を追加するにはどのようにJavaの?

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 );
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=233435&siteId=1