java数组函数参数_java函数数组参数的复制问题

在多线程解n王后问题的优化一文中,引用的原作者代码有如下一行,

short[] chessTemp=chess.clone();

但是,我们知道数组在c语言里就是地址,是可以用来写数组内容的,这里为什么要clone呢?难道java的数组参数的表现不同?

我把相关代码改写为不利用clone,保存为EightQueen9.java,运行结果不变,并且速度翻倍了。

D:\>java EightQueen9

解决 9皇后问题,用时:140毫秒,计算结果:352

解决 10皇后问题,用时:16毫秒,计算结果:724

解决 11皇后问题,用时:15毫秒,计算结果:2680

解决 12皇后问题,用时:63毫秒,计算结果:14200

解决 13皇后问题,用时:296毫秒,计算结果:73712

解决 14皇后问题,用时:1544毫秒,计算结果:365596

解决 15皇后问题,用时:8705毫秒,计算结果:2279184

D:\>javac EightQueen8.java

D:\>java EightQueen8

解决 9皇后问题,用时:47毫秒,计算结果:352

解决 10皇后问题,用时:0毫秒,计算结果:724

解决 11皇后问题,用时:31毫秒,计算结果:2680

解决 12皇后问题,用时:125毫秒,计算结果:14200

解决 13皇后问题,用时:484毫秒,计算结果:73712

解决 14皇后问题,用时:2605毫秒,计算结果:365596

解决 15皇后问题,用时:18065毫秒,计算结果:2279184

同时发现一件有趣的事,如果2个java文件里有同名的实现类,比如EightQueen8.java和EightQueen9.java都有一个class EightQueenThread implements Callable,那么后编译的类会产生一个新的EightQueenThread.class,但先编译的主class仍能调用它。比如,上面重新编译了EightQueen8.java,此时执行EightQueen9的时间就和8一样了,因为2个文件的主类只有名字不同。

D:\>java EightQueen9

解决 9皇后问题,用时:0毫秒,计算结果:352

解决 10皇后问题,用时:15毫秒,计算结果:724

解决 11皇后问题,用时:31毫秒,计算结果:2680

解决 12皇后问题,用时:110毫秒,计算结果:14200

解决 13皇后问题,用时:483毫秒,计算结果:73712

解决 14皇后问题,用时:2590毫秒,计算结果:365596

解决 15皇后问题,用时:17363毫秒,计算结果:2279184

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值