2006-03-08
1.5 ArrayUtils.clone() 和ArrayUtils.reverse()
clone并倒转一个数组
问题提出:需要clone并倒转一个数组中的内容
解决方法:使用ArrayUtils.clone() 和 ArrayUtils.reverse() 方法
使用举例:
import org.apache.commons.lang.ArrayUtils;

long[] array = { 1, 3, 2, 3, 5, 6 };
long[] reversed = ArrayUtils.clone( array );

ArrayUtils.reverse( reversed );

System.out.println( "Original: " + ArrayUtils.toString( array ) );

System.out.println( "Reversed: " + ArrayUtils.toString( reversed ) );输出的结果为:Original: { 1, 3, 2, 3, 5, 6 } Reversed: { 6, 5, 3, 2, 3, 1 }
Discussion:在上述例子中ArrayUtils.clone()返回了一个新数组的引用,而ArrayUtils.reserve()方法会直接操作参数所指定的数组。除了基本类型外,这两个方法还支持对象数组。
如果没有这两个方法的帮助,我们可能会用以下方法实现倒转。
// readTemps returns a 1000 member double[]

double[] temperature = readTemps( );
double[] reversed = new double[temperature.length];

for( int i = 0; i < temperature.length; i++ ){
reversed[reversed.length - (i+1)] = temperature[i];
}另外一种方法利用Collections.reverse(),该方法是对一个List对象进行操作,所有之前需要将数组转换成List对象,另外List里面不能含有基本类型,还需要将基本类型包装一下,以下是实现的源码:
double[] temps = readTemps( );

List tempList = new ArrayList( );
for( int i = 0; i < temps.length; i++ ){
tempList.add( new Double[temps[i]] );
}

Collections.reverse( tempList );
double[] reversed = new double( tempList.size( ) );
Iterator i = tempList.iterator( );
int index = 0;
while( i.hasNext( ) ){
reversed[index] = ((Double) i.next( )).doubleValue( );
index++;
}
有些人会问道:不是所有的数组都有一个clone()方法吗?一种可能的解释是ArrayUtils.clone()使程序更具可读性,另外当一个数组引用使null时,ArrayUtils.clone()会返回一个null而不是抛出一个运行时异常。
问题提出:需要clone并倒转一个数组中的内容
解决方法:使用ArrayUtils.clone() 和 ArrayUtils.reverse() 方法
使用举例:
import org.apache.commons.lang.ArrayUtils;
long[] array = { 1, 3, 2, 3, 5, 6 };
long[] reversed = ArrayUtils.clone( array );
ArrayUtils.reverse( reversed );
System.out.println( "Original: " + ArrayUtils.toString( array ) );
System.out.println( "Reversed: " + ArrayUtils.toString( reversed ) );Discussion:在上述例子中ArrayUtils.clone()返回了一个新数组的引用,而ArrayUtils.reserve()方法会直接操作参数所指定的数组。除了基本类型外,这两个方法还支持对象数组。
如果没有这两个方法的帮助,我们可能会用以下方法实现倒转。
// readTemps returns a 1000 member double[]
double[] temperature = readTemps( );
double[] reversed = new double[temperature.length];
for( int i = 0; i < temperature.length; i++ ){
reversed[reversed.length - (i+1)] = temperature[i];
}
double[] temps = readTemps( );
List tempList = new ArrayList( );for( int i = 0; i < temps.length; i++ ){
tempList.add( new Double[temps[i]] );
}

Collections.reverse( tempList );
double[] reversed = new double( tempList.size( ) );
Iterator i = tempList.iterator( );
int index = 0;while( i.hasNext( ) ){
reversed[index] = ((Double) i.next( )).doubleValue( );
index++;
}

- 09:01
- 浏览 (18)
- 评论 (0)
- 分类: [网站分类]2.Java新手区
- 相关推荐







评论排行榜