在Java中颠倒数组

如果我有这样的数组:

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

有一个更简单的方法吗?

Collections.reverse()可以为你做这个工作,如果你把你的数字在一个Integers List

 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] 

如果你想在原地颠倒数组:

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

它工作,因为Arrays.asList返回到原始数组的直写代理。

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

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

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

尝试这个:

 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

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

如果你不想使用临时variables,你也可以这样做:

 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 = ab arr[i] -= arr[len - 1 - i]; // a = ab } 

以最less量的掉期进行反转。

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

或者你可以通过它后台循环

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

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

我会做这样的事情:

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

你搞砸了

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

下面的代码将把索引ij之间的数组取reverse(a, 0, a.length - 1)将整个数组调用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; } } 

这段代码将有助于:

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

您可以将原始数组发送到一个方法,例如:

之后你创build一个新的数组来保存相反的元素

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