我有以下代码:
static boolean nextPerm(int[] A) {
int N = A.length;
int k = N - 1;
int[] S = { };
while (k >= 0) {
if (S.length > 0 && containsLarger(S, A[k])) {
int v = firstLargest(S, A[k]);
//int vIndex = Arrays.asList(S).indexOf(v);
List<Integer> test = Arrays.asList(S); // // ERRORS HERE. Before error, S is { 2 }
System.out.println(test.get(0));
int vIndex = test.indexOf(S);
S[vIndex] = A[k];
A[k] = v;
System.arraycopy(S, 0, A, k + 1, N - k);
return true;
} else {
S = addIntAscend(S, A[k]);
k -= 1;
}
}
return false;
}
在出错之前,S是一个int数组{2}。将TEST设置为Arrays.asList(S)时出错:
Perms.java:44: error: incompatible types
List<Integer> test = Arrays.asList(S);
^
required: List<Integer>
found: List<int[]>
1 error
为什么会这样?我以为原始人是自动装箱的?
答案 0 :(得分:4)
请注意以Not an Issue
结尾的bug report引用以下原因。
整个数组的自动装箱不是指定的行为 原因。对于大型阵列来说,这可能是非常昂贵的。
因此,要将数组转换为列表,您需要执行此操作
List<Integer> test = new ArrayList<Integer>(S.length);
for (int i : S) {
test.add(i);
}
答案 1 :(得分:3)
原语是自动装箱的,但阵列不是。 如果将int []更改为Integer []的
,它将起作用