在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; }
下面的代码将把索引i
和j
之间的数组取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]; }