# Java - 3 ways to reverse an array
###### tags: `Java` `Basic Java`
## Method 1: Setting Two Pointers (Start & End)(Fastest)
```
public static void pointerSwap(int[] array) {
int start = 0;
int end = array.length - 1;
int temp;
while(start >= end) {
temp = array[start];
array[start] = array[end];
array[end] = temp;
start++;
end--;
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + "\t");
}
}
```
Point: while(start >= end)
= for odd elements array
\> for even elements array
**Be sure the start pointer does not exceed end pointer**
## Method 2: Element Swapping (Slower)
```
public static void elementSwap(int[] array) {
int temp;
for (int i = 0; i < array.length / 2; i++) {
temp = array[0 + i];
array[0 + i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + "\t");
}
}
```
Point:
```
temp = array[0 + i];
array[0 + i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
```
Explanation:
assume an array [index_0, index_1 , index_2, index_3, index_4, index_5]
where array.length = 6
we want: (3 swaps)
index_0 <-> index_5
index_1 <-> index_4
index_2 <-> index_3
which means, when i = 0; (3 swaps)
index_i <-> index_(array.length - 1) - 0
index_i + 1 <-> index_(array.length - 1) - 1
index_i + 2 <-> index_(array.length - 1) - 2
so the iteration will be:
for (int i = 0; i < **array.length / 2**; i++)
**where array.length / 2 means how many swaps will be made** (in this case, 6 / 2 = 3)
## Method 3: Backwards Iteration (Slowest)
```
public static int[] reverseArray(int[] array) {
int[] returnArray = new int[array.length];
int index = array.length - 1;
for (int i = 0; i < array.length; i++) {
returnArray[index] = array[i];
index--;
}
return returnArray;
}
```
## Complete Code:
```
public class Reverse {
public static int[] input = {11, 22, 33, 44, 55};
public static void main(String[] args) {
int [] result = reverseArray(input);
for (int i : result) {
System.out.print(i + "\t");
}
System.out.println();
elementSwap(input);
System.out.println();
pointerSwap(input);
}
public static void pointerSwap(int[] array) {
int start = 0,
int end = array.length - 1;
int temp;
while(start >= end) {
temp = array[start];
array[start] = array[end];
array[end] = temp;
start++;
end--;
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + "\t");
}
}
public static void elementSwap(int[] array) {
int temp;
for (int i = 0; i < array.length / 2; i++) {
temp = array[0 + i];
array[0 + i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + "\t");
}
}
public static int[] reverseArray(int[] array) {
int[] returnArray = new int[array.length];
int index = array.length - 1;
for (int i = 0; i < array.length; i++) {
returnArray[index] = array[i];
index--;
}
return returnArray;
}
}
```
Output Result:
```
55 44 33 22 11 -> 6978400 ns
55 44 33 22 11 -> 330200 ns
55 44 33 22 11 -> 275600 ns
```