1. 程式人生 > >Java陣列反轉的方法

Java陣列反轉的方法

反轉陣列的操作有一些工具類給出了實現,如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();
	}
使用工具類的實現
	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();
	}
ArrayUtils.reverse()原始碼:
   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++;
        }
    }