我的问题是我正在尝试反转数组。我发现显然适用于此的方法是使用
Collections.reverse(Arrays.asList(arrx));
但是我想把它存回一个数组以备将来使用。 我开始时并不是很熟悉Collections,我确实为它提供了文档,但是在将它存回数组方面我有点迷失。 你会怎么做? 感谢。
答案 0 :(得分:2)
Collections.toArray()是你的朋友。它有两种方法,一种是类型安全的,另一种是非类型安全的(首选使用类型安全)。
Integer[] a = new Integer[] {1,2,3};
List<Integer> l = Arrays.asList(a);
Collections.reverse(l);
l.toArray(a);
如果可能,使用集合而不是数组是最佳做法。
答案 1 :(得分:2)
以下考虑略有学术性,但我觉得应该指出:
Arrays#asList
会在提供的数组上显示“view”。 JavaDoc说:“返回由指定数组支持的固定大小的列表。(对返回列表的更改”直写“到数组。)”。看看你的例子:
String[] arrx = {"alpha", "beta", "gamma"};
Collections.reverse(Arrays.asList(arrx));
System.out.println(Arrays.toString(arrx)); // [gamma, beta, alpha]
...这意味着,原始数组arrx
将被颠倒。如果你只需要反转阵列,一切都很好。但是:如果仍需要原始数组,请在反转之前创建副本:
String[] arrx = {"alpha", "beta", "gamma"};
List temp = new ArrayList(Arrays.asList(arrx));
Collections.reverse(temp);
Object[] reversedArrx = temp.toArray();
System.out.println(Arrays.toString(arrx)); // [alpha, beta, gamma]
System.out.println(Arrays.toString(reversedArrx)); // [gamma, beta, alpha]
(为简洁省略了泛型。)
答案 2 :(得分:-1)
那么for循环怎么样?它会像:
static void reverse(int[] t){
for(int x=0; x<t.length / 2; x++){
int y = t[x];
t[x] = t[t.length - 1 - x];
t[t.length - 1 - x] = y;
}
}