我不喜欢,我可以在Python处理列表的方式。它做任何递归解决方案看起来简单和干净。例如获得元素的所有排列在一个列表,在Python中的典型问题是这样的:在Java中有没有更好的方法来处理列表? (Python的和Java)
def permutation_recursion(numbers,sol):
if not numbers:
print "this is a permutation", sol
for i in range(len(numbers)):
permutation_recursion(numbers[:i] + numbers[i+1:], sol + [numbers[i]])
def get_permutations(numbers):
permutation_recursion(numbers,list())
if __name__ == "__main__":
get_permutations([1,2,3])
我喜欢的方式,我可以简单的做这样的事情 numbers[:i] + numbers[i+1:]
或sol + [numbers[i]]
得到修改单的新实例
如果我尝试代码完全在Java中一样,它看起来像:
import java.util.ArrayList;
import java.util.Arrays;
class rec {
static void permutation_recursion(ArrayList<Integer> numbers, ArrayList<Integer> sol) {
if (numbers.size() == 0)
System.out.println("permutation="+Arrays.toString(sol.toArray()));
for(int i=0;i<numbers.size();i++) {
int n = numbers.get(i);
ArrayList<Integer> remaining = new ArrayList<Integer>(numbers);
remaining.remove(i);
ArrayList<Integer> sol_rec = new ArrayList<Integer>(sol);
sol_rec.add(n);
permutation_recursion(remaining,sol_rec);
}
}
static void get_permutation(ArrayList<Integer> numbers) {
permutation_recursion(numbers,new ArrayList<Integer>());
}
public static void main(String args[]) {
Integer[] numbers = {1,2,3};
get_permutation(new ArrayList<Integer>(Arrays.asList(numbers)));
}
}
要创建相同的递归我需要做的:
ArrayList<Integer> remaining = new ArrayList<Integer>(numbers);
remaining.remove(i);
ArrayList<Integer> sol_rec = new ArrayList<Integer>(sol);
sol_rec.add(n);
这是相当丑陋,它获取更多复杂的解决方案更糟糕。像在this example
所以我的问题是...有没有在Java API中的任何内建运算符或帮助函数,这将使该解决方案更“Pythonic”?
总是有Jython :) – Seth 2011-01-11 20:15:42
标题中的`more`是多余的 - 问题应该是有没有什么干净的方式来处理Java中的列表。而afaik,不 - 没有。 – 2011-02-04 00:29:10