2014-09-27 27 views
0

我的问题是我想扭转一个数组。我发现这种方法显然是用于这个是使用如何将Collection.reverse存储回数组?

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

但是,我想将它存储回阵列供将来使用。 我并不十分熟悉Collections,但是我将它放在一个数组中,但是我把它放在一个数组中,我有点遗失。 你会怎么做呢? 谢谢。

回答

-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; 
    } 
} 
+0

当我尝试这个时,我的Java编译器给了我多个错误。 – ajb 2014-09-27 01:22:32

+0

@ajb是的,这不是Java,但你有想法。 – gwenzek 2014-09-27 08:08:56

+0

通常,如果有人提出有关Java的问题,并且只有Java,并且在问题上具有'java'标记,则用另一种语言回答是不合适的。无论如何,它并不回答问题。他想知道如何使用Java中已有的'reverse'方法来反转数组,而不是用于反转数组的一般算法。 – ajb 2014-09-27 09:02:35

2

Collections.toArray()是你的朋友。它有两种方法:类型安全型和非类型安全型(首选使用类型安全)。

Integer[] a = new Integer[] {1,2,3}; 
    List<Integer> l = Arrays.asList(a); 
    Collections.reverse(l); 
    l.toArray(a); 

如果可能的话,使用集合而不是数组是最佳实践。

+0

在这种情况下'#toArray()'不是必需的。 'Arrays#asList'上的JavaDoc说:“返回一个由指定数组支持的固定大小的列表。**(对返回列表进行”直写“到数组的更改。)**”。 – qqilihq 2014-09-27 08:21:42

+0

@qqilihq但问题仍然是“我想将它存储回数组中以备将来使用”。 – Aivean 2014-09-27 08:23:48

+0

@Aivean不过,应该指出的是,原始数组是被修改的(显然这对于​​问题的作者是不清楚的)。 – qqilihq 2014-09-27 08:24:58

2

考虑下列因素略有学术,但是我觉得这应该指出的:

Arrays#asList会给你一个“视图”提供的阵列上。 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] 

(略去了泛型)。