2

次のコードがあるとします。

    public static ArrayList<Integer> doSomething(int n) {

    ArrayList<Integer> list = new ArrayList<Integer>();
    if (n <= 0)
        return list ;
    list = ListMethods.doSomething(n - 1);
    list.add(n);

    return list;

これはこのコードよりも遅いですか:

    public static ArrayList<Integer> doSomething(int n) {

    ArrayList<Integer> list = null;
    if (n <= 0)
        return list = new ArrayList<Integer>();
    list = ListMethods.doSomething(n - 1);
    list.add(n);

    return list;

私の講師の 1 人がノートで後者のコードを使用しているのに対し、オンラインで他のガイドが前者を使用しているのを見たので、質問します。個人的な好みですか、それとも速度の違いはありますか? また、速度差があるとすれば、気にならないほど小さいのでしょうか?

4

1 に答える 1

4

はい、最初のコードは遅くなります。0 より大きいすべての値について、最初の部分は次のようになります。n

ArrayList<Integer> list = new ArrayList<Integer>();
list = ListMethods.doSomething(n - 1);

新しいArrayListオブジェクトを作成してすぐに同じ変数に別の値を割り当てても意味がありません。

2 番目のコードの方が優れていますが、読みやすさに関しては大幅に改善される可能性があります。

public static ArrayList<Integer> doSomething(int n) {
    if (n <= 0) {
        return new ArrayList<Integer>();
    }
    ArrayList<Integer> list = doSomething(n - 1);
    list.add(n);
    return list;
}

これは、実際に必要なlist場合にのみ変数を使用します。new を返すだけの場合は、それを宣言することさえ無意味です。n <= 0ArrayList<Integer>

于 2013-02-17T20:12:33.337 に答える