如何将Collection.reverse存储回数组?

时间:2014-09-27 00:27:34

标签: java arrays

我的问题是我正在尝试反转数组。我发现显然适用于此的方法是使用

 Collections.reverse(Arrays.asList(arrx));

但是我想把它存回一个数组以备将来使用。 我开始时并不是很熟悉Collections,我确实为它提供了文档,但是在将它存回数组方面我有点迷失。 你会怎么做? 感谢。

3 个答案:

答案 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;
  }
}