我有一个看起来更简洁的函数:
public static List<Integer> permuteDigits(int number) {
List<Integer> permutations = new ArrayList<>();
for (String s : permutations(String.valueOf(number)))
permutations.add(Integer.parseInt(s));
return permutations;
}
但是您可以看到,在for-each循环中有一个函数调用。我非常确定编译器不会执行此操作,但是...函数不会在for循环的每次迭代中调用,是吗?
我几乎肯定不是这样,但我只是想确定一下。也就是说,以上代码的效率不低于以下代码:
public static List<Integer> permuteDigits(int number) {
List<String> strPerms = permutations(String.valueOf(number));
List<Integer> permutations = new ArrayList<>();
for (String s : strPerms)
permutations.add(Integer.parseInt(s));
return permutations;
}
正确?
最佳答案
在您的第一个代码块中,permutations(String.valueOf(number))
将被调用一次,返回其结果,然后for
循环将遍历结果中的元素。像下面的例子一样:
static List<Integer> createNumbers() {
System.out.println("createNumbers");
return Arrays.asList(0, 1, 2);
}
public static void main(String[] args) {
for (Integer num : createNumbers()) {
System.out.println(num);
}
}
结果显示
createNumbers()
仅被调用一次:createNumbers
0
1
2