Java陣列反轉的方法
阿新 • • 發佈:2019-02-15
反轉陣列的操作有一些工具類給出了實現,如org.apache.commons.lang3.ArrayUtils.reverse()其他集合類的反轉Collections.reverse(ArrayList list)等。
使用這些簡單快捷,以下是自己的幾種實現方式
數字型別的可以使用異或操作完成首尾交換操作:
其他型別的需要使用一個臨時容器來完成交換操作:public static String reverseNumArray(int[] array){ int head = 0; int tail = array.length - 1; int length = array.length / 2; for(int i = 0 ; i < length ; i++){ array[head] = array[head]^array[tail]; array[tail] = array[tail]^array[head]; array[head] = array[head]^array[tail]; head++; tail--; } StringBuffer sb = new StringBuffer(); for(int i = 0 ; i < array.length ; i++){ sb.append(array[i]); if(i < array.length-1){ sb.append(" "); } } return sb.toString(); }
使用工具類的實現public static String reverseStr(String resource){ String[] strArray = resource.split(" "); StringBuffer sb = new StringBuffer(); int head = 0; int tail = strArray.length-1; int length = strArray.length/2; String temp = ""; for(int i = 0 ; i < length ; i++){ temp = strArray[head]; strArray[head] = strArray[tail]; strArray[tail] = temp; head++; tail--; } for(int i = 0 ; i < strArray.length ; i++){ sb.append(strArray[i]); if(i < strArray.length-1){ sb.append(" "); } } return sb.toString(); }
ArrayUtils.reverse()原始碼:public static String reverseStrUtil(String resource){ StringBuffer sb = new StringBuffer(); String[] array = resource.split(" "); ArrayUtils.reverse(array); for(int i = 0 ; i < array.length ; i++){ sb.append(array[i]); if(i < array.length-1){ sb.append(" "); } } return sb.toString(); }
public static void reverse(final Object[] array, int startIndexInclusive, int endIndexExclusive) {
if (array == null) {
return;
}
int i = startIndexInclusive < 0 ? 0 : startIndexInclusive;//等同與上面第二段程式碼中的head變數
int j = Math.min(array.length, endIndexExclusive) - 1;//等同與上面第二段程式碼中的tail變數
Object tmp;//等同與上面第二段程式碼中的temp變數
while (j > i) {//使用while迴圈判斷首尾的大小關係,比自己的實現方式好了不止一個級別,畢竟是專家級的程式碼
tmp = array[j];
array[j] = array[i];
array[i] = tmp;
j--;
i++;
}
}