结论:还是用for循环吧。
/*
* 测试输入赋相同值的速度:
* 问题来源:xx算法每次都要对两个 length=802 的数组赋值,也就是没求一条最短路径就要赋值一次,也就是大概赋值300*40=12000次
* 结论:还是用for循环做吧
* output:
* 用for循环做的赋值时间是:39
用System.Arraycopy()循环做的赋值时间是:64*/
public class SpreadArrayInst {
public static void main(String[] args) {
// TODO Auto-generated method stub
int iter=12000;
int len=802;
int[] Dis=new int[len];a
int[] Path=new int[len];
for(int i=0;i<len;i++)
{
//System.out.print(Dis[i]+" ");//也就是int型数组全部赋初值为0
Dis[i]=i+1;
Path[i]=len-i;
}
//用for循环实现
long times1=System.currentTimeMillis();
for(int i=0;i<iter;i++)
{
for(int j=0;j<Dis.length;j++)
{
Dis[j]=-1;
Path[j]=len;
}
}
long timee1=System.currentTimeMillis();
System.out.println("用for循环做的赋值时间是:"+(timee1-times1));
//用System.Arraycopy()实现
long times2=System.currentTimeMillis();
for(int i=0;i<iter;i++)
{
int[] sDis= new int[Dis.length];
int[] sPath= new int[Path.length];
System.arraycopy(Dis, 0, sDis, 0, sDis.length);//最后应该是长度,而不是结束位置
System.arraycopy(Path, 0, sPath, 0, sPath.length);
}
long timee2=System.currentTimeMillis();
System.out.println("用System.Arraycopy()循环做的赋值时间是:"+(timee2-times2));
/ * output:
* 用for循环做的赋值时间是:39
用System.Arraycopy()循环做的赋值时间是:64*/
}
}