在Java中反转数组

时间:2012-10-01 18:20:36

标签: java arrays reverse

如果我有这样的数组:

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] };
}

有更简单的方法吗?

14 个答案:

答案 0 :(得分:70)

如果您将数字放在List Integers中,

Collections.reverse()可以为您完成这项工作。

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]

答案 1 :(得分:63)

如果您想要就地反转阵列:

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

它起作用,因为Arrays.asList将一个直写代理返回到原始数组。

答案 2 :(得分:32)

如果您不想使用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;
}

答案 3 :(得分:11)

我喜欢保留原始数组并返回副本。这是通用版本:

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));
}

答案 4 :(得分:10)

试试这个:

public int[] reverse3(int[] nums) {
    int[] reversed = new int[nums.length];
    for (int i=0; i<nums.length; i++) {
        reversed[i] = nums[nums.length - 1 - i];
    }
    return reversed;
}

我的意见是:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

我得到的输出:

12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1

答案 5 :(得分:5)

您可以使用org.apache.commons.lang.ArrayUtils: ArrayUtils.reverse(array)

答案 6 :(得分: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;
}

答案 7 :(得分: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;
}

答案 8 :(得分: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];
}

(注意:我没有编译这个,但希望它是正确的)

答案 9 :(得分: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];
}

答案 10 :(得分: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;
}

答案 11 :(得分:2)

以下内容将反转索引jreverse(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; } }

{{1}}

答案 12 :(得分:2)

如果您不想使用临时变量,您也可以这样做:

final int len = arr.length;
for (int i=0; i < (len/2); i++) {
    arr[i] += arr[len - 1 - i]; //  a = a+b
    arr[len - 1 - i] = arr[i] - arr[len - 1 - i];   //  b = a-b
    arr[i] -= arr[len - 1 - i]; //  a = a-b
}

答案 13 :(得分:-2)

此代码有助于:

int [] a={1,2,3,4,5,6,7};
for(int i=a.length-1;i>=0;i--)
  System.out.println(a[i]);