有没有更优雅的方式来处理Java中的列表? (Python VS Java)
发布时间:2020-05-24 12:51:25 所属栏目:Java 来源:互联网
导读:我喜欢用 Python处理列表的方式.它做任何递归解决方案看起来容易和干净.例如,在Python中获取元素的所有排列的典型问题如下所示: def permutation_recursion(numbers,sol): if not numbers: print this is a permutation, sol for i in range(len(numbe
|
我喜欢用 Python处理列表的方式.它做任何递归解决方案看起来容易和干净.例如,在Python中获取元素的所有排列的典型问题如下所示: 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])
我喜欢通过这样的方式简单地获取修改列表的新实例的方式 如果我尝试在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,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”? 解决方法没有.但这就是为什么Martin Odersky创造了Scala.他甚至说他对Scala的目标之一就是它是Java世界的Python. Scala编译为Java字节码,并且可以轻松地与Java编译类进行交互. 如果这不是一个选项,你可以看看Commons Collection Library. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
