2014-09-27 63 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] 

(略去了泛型)。