场景
事情是这样的,我先来还原一下场景,有如下图中的一段代码,这段代码的逻辑很简单。
- 先生成一个0-top范围的有序集合,比如top=100,那么就是生成[0,1,2,3,…99,100];
- 如果shuffle=true,则将这个集合顺序打乱,相当于洗牌;
- 然后遍历这个集合,统计出集合中数值小于top/2的数量,这个结果不管是否洗牌都是top的一半;
- 记录循环开始和结束的时间,看看循环总共花费多少时间。
按理说,不管这个集合有多大,都会执行top次的循环,每个循环里都要执行if判断,所以花费的时间不管是否洗牌应该都是一样的对吧。
但是,神奇的事情发生了!
public static void main(String[] args) {
perdication(1000000,true);
perdication(1000000,false