49

次のような配列がある場合:

1 4 9 16 9 7 4 9 11 

次のように配列を逆にする最良の方法は何ですか?

11 9 4 7 9 16 9 4 1 

以下のコードがありますが、少し面倒だと思います。

public int[] reverse3(int[] nums) {
    return new int[] { nums[8], nums[7], nums[6], nums[5], num[4],
                       nums[3], nums[2], nums[1], nums[0] };
}

もっと簡単な方法はありますか?

4

15 に答える 15

71

Collections.reverse()の中に数字を入れると、その仕事をすることができListますIntegers

List<Integer> list = Arrays.asList(1, 4, 9, 16, 9, 7, 4, 9, 11);
System.out.println(list);
Collections.reverse(list);
System.out.println(list);

出力:

[1, 4, 9, 16, 9, 7, 4, 9, 11]
[11, 9, 4, 7, 9, 16, 9, 4, 1]
于 2012-10-01T18:22:46.027 に答える
68

アレイをインプレースで反転する場合:

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

Arrays.asListがライトスループロキシを元の配列に返すため、これは機能します。

于 2012-10-01T18:26:27.310 に答える
34

使用したくない場合は、Collectionsこれを行うことができます:

for (i = 0; i < array.length / 2; i++) {
  int temp = array[i];
  array[i] = array[array.length - 1 - i];
  array[array.length - 1 - i] = temp;
}
于 2012-10-01T18:29:34.857 に答える
12

元の配列を保持し、コピーを返すのが好きです。これは一般的なバージョンです:

public static <T> T[] reverse(T[] array) {
    T[] copy = array.clone();
    Collections.reverse(Arrays.asList(copy));
    return copy;
}

元の配列を保持せずに:

public static <T> void reverse(T[] array) {
    Collections.reverse(Arrays.asList(array));
}
于 2013-01-26T02:02:22.547 に答える
5

org.apache.commons.lang.ArrayUtils を使用できます: ArrayUtils.reverse(array)

于 2014-03-21T14:37:40.100 に答える
3

または、バックイヤーでループすることもできます

int[] firstArray = new int[]{1,2,3,4};
int[] reversedArray = new int[firstArray.length];
int j = 0;
for (int i = firstArray.length -1; i > 0; i--){
    reversedArray[j++] = firstArray[i];
}

(注:これはコンパイルしていませんが、正しいことを願っています)

于 2012-10-01T18:33:38.090 に答える
3

スワップの最小量でインプレースリバーサル。

for (int i = 0; i < a.length / 2; i++) {
    int tmp = a[i];
    a[i] = a[a.length - 1 - i];
    a[a.length - 1 - i] = tmp;
}
于 2014-11-08T22:17:23.297 に答える
2

私はこのようなことをします:

public int[] reverse3(int[] nums) {
  int[] numsReturn = new int[nums.length()]; 
  int count = nums.length()-1;
  for(int num : nums) {
    numsReturn[count] = num;
    count--;
  }
  return numsReturn;
}
于 2012-10-01T18:31:52.390 に答える
2
 public void swap(int[] arr,int a,int b)
 {
    int temp=arr[a];
    arr[a]=arr[b];
    arr[b]=temp;        
}
public int[] reverseArray(int[] arr){
    int size=arr.length-1;

    for(int i=0;i<size;i++){

        swap(arr,i,size--); 

    }

    return arr;
}
于 2015-01-12T04:59:23.283 に答える
2

以下は、インデックス間の配列をその場で反転しij(配列呼び出し全体を反転するにはreverse(a, 0, a.length - 1))

    public void reverse(int[] a, int i , int j) {
        int ii =  i;
        int jj = j;

        while (ii < jj) {
            swap(ii, jj);
            ++ii;
            --jj;
        }
    }
于 2015-06-30T16:17:33.857 に答える
2

あなたはめちゃくちゃ

int[] firstArray = new int[]{1,2,3,4};
int[] reversedArray = new int[firstArray.length];
int j = 0;
for (int i = firstArray.length -1; i >= 0; i--){
    reversedArray[j++] = firstArray[i];
}
于 2013-08-26T20:13:52.267 に答える
-3

たとえば、元の配列をメソッドに送信できます。

その後、逆の要素を保持する新しい配列を作成します

public static void reverse(int[] a){

int[] reversedArray = new int[a.length];

for(int i = 0 ; i<a.length; i++){
reversedArray[i] = a[a.length -1 -i];


}
于 2015-08-16T11:19:35.717 に答える