打字猴:1.70044506e+09
1700445060
1700445061 List<String>tagClouds=new ArrayList<String>(tagCloudNum);
1700445062
1700445063 Random rand=new Random();
1700445064
1700445065 for(int i=0;i<tagCloudNum;i++){
1700445066
1700445067 //取得随机位置
1700445068
1700445069 int randomPosition=rand.nextInt(tagCloudNum);
1700445070
1700445071 //当前元素与随机元素交换
1700445072
1700445073 Collections.swap(tagClouds, i,randomPosition);
1700445074
1700445075 }
1700445076
1700445077 }
1700445078
1700445079 上面使用了Collections的swap方法,该方法会交换两个位置的元素值,不用我们自己写交换代码了。难道乱序到此就优化完了吗?没有,我们可以继续重构,第二版重构如下:
1700445080
1700445081 public static void main(String[]args){
1700445082
1700445083 int tagCloudNum=10;
1700445084
1700445085 List<String>tagClouds=new ArrayList<String>(tagCloudNum);
1700445086
1700445087 //打乱顺序
1700445088
1700445089 Collections.shuffe(tagClouds);
1700445090
1700445091 }
1700445092
1700445093 这才是我们想要的结果,就这一句话,即可打乱一个列表的顺序,不用我们费尽心思的遍历、替换元素了。我们一般很少用到shuffle这个方法,那它可以用在什么地方呢?
1700445094
1700445095 可以用在程序的“伪装”上。
1700445096
1700445097 比如我们例子中的标签云,或者是游戏中的打怪、修行、群殴时宝物的分配策略。
1700445098
1700445099 可以用在抽奖程序中。
1700445100
1700445101 比如年会的抽奖程序,先使用shuffle把员工排序打乱,每个员工的中奖几率就是相等的了,然后就可以抽取第一名、第二名。
1700445102
1700445103 可以用在安全传输方面。
1700445104
1700445105 比如发送端发送一组数据,先随机打乱顺序,然后加密发送,接收端解密,然后自行排序,即可实现即使是相同的数据源,也会产生不同密文的效果,加强了数据的安全性。
1700445106
1700445107
1700445108
1700445109
[ 上一页 ]  [ :1.70044506e+09 ]  [ 下一页 ]