您的位置:首页 > 编程语言 > Java开发

Java数组反转的方法

2016-09-27 17:13 295 查看
反转数组的操作有一些工具类给出了实现,如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++;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: