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;

我问是因为我的一位讲师在他的笔记中使用后一种代码,而我看到其他在线指南使用前者。只是个人喜好,还是有速度差异?另外,如果存在速度差异,是否太小而无需担心?

4

1 回答 1

4

是的,第一个代码比较慢。对于大于 0的每个值,您最终得到的第一部分相当于:n

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

创建一个新ArrayList对象并立即为同一个变量分配不同的值是没有意义的。

第二个代码更好,但在可读性方面仍然可以显着提高:

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这仅在实际需要时才使用变量。甚至为n <= 0您要返回一个新ArrayList<Integer>.

于 2013-02-17T20:12:33.337 回答