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

    long[] array = 132356 }
;
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];

   forint 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( );
 forint 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而不是抛出一个运行时异常。
评论
发表评论

您还没有登录,请登录后发表评论