ジャワ - ソナー - アレイは、ループを使用してコピーするべきではありません

sgrillon:

私のJavaコード:

public class TestArray {

    public static void main(String[] args) {

        final String[] cols = { "a", "b", "c", "d" };
        List<String> columns = new ArrayList<>(4);

        // for (int i = 1; i < cols.length - 1; i++) {
        // columns.add(cols[i]);
        // }
        System.arraycopy(cols, 0, columns, 0, cols.length - 1);

        for (String c : columns) {
            System.out.println(c);
        }

    }

}

ソナーは言う:配列は、ループを使用してコピーするべきではありません

配列または配列の一部をコピーするためにループを使用することは、単にそこにビルトインされているあなたのためにそれを行うための機能無駄なコードです。その代わりに、使用Arrays.copyOf、別の配列に配列全体をコピーする別の配列への配列のサブセットのみをコピーするSystem.arraycopyのを使用して、アレイを使用して新しいリストのコンストラクタを供給するためには、Arrays.asListを使用します。

Arrays.asListは、単に元の配列の周りにコレクションラッパーを置く非固定サイズのリストが所望される場合、そうさらなるステップが必要であることに留意されたいです。

そう、私はこれを試してみてください。

System.arraycopy(cols, 1, columns, 0, cols.length -1);

私はこのエラーがあります:

Exception in thread "main" java.lang.ArrayStoreException
    at java.lang.System.arraycopy(Native Method)
    at com.company.TestArray.main(TestArray.java:16)

私は配列から来る私の問題は、リストはないと思います

アンディ・ターナー:

あなたは使用することはできませんSystem.arraycopy配列ではない何かにデータを格納します。それが述べたよう文書で

以下のいずれかに該当する場合...、ArrayStoreExceptionスローし、転送先は変更されません。

  • src引数が配列ではない物体を指します。
  • dest引数が配列ではない物体を指します。
  • ...

場合はcols、参照型指定された配列であり、単に使用Arrays.asListしてsubList

columns.addAll(Arrays.asList(cols).subList(1, cols.length - 1));

おすすめ

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