说我有以下代码:
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;
我问,因为我的一位讲师在他的笔记中使用了后面的代码,而我看到其他在线指南使用前者。这只是个人偏好,还是存在速度差异?另外,如果存在速度差异,是否太小而无法关注?
答案 0 :(得分:4)
是的,第一个代码速度较慢。对于 n
的每个值大于0,您最终得到的第一部分相当于:
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>
。