必威体育Betway必威体育官网
当前位置:首页 > IT技术

JAVA:Collections类的shuffle()方法

时间:2019-09-26 18:42:08来源:IT技术作者:seo实验室小编阅读:84次「手机版」
 

collections.shuffle

java中Collections类的shuffle()方法的作用是将List中的内容随机打乱顺序。

[java] view plain copy print?

  1. importjava.util.ArrayList;
  2. importjava.util.Collections;
  3. importjava.util.HashSet;
  4. importjava.util.List;
  5. importjava.util.Random;
  6. /*
  7. *Createdon2015年12月23日
  8. *Copyright2015YongCailimitedcrop.AllRightsReserved
  9. *
  10. */
  11. publicclassCollectionShuffle{
  12. publicstaticvoidmain(String[]args){
  13. List<integer>li=newArrayList<Integer>();
  14. HashSet<Integer>set=newHashSet<Integer>();
  15. for(inti=0;i<10;i++){
  16. li.add(i);
  17. }
  18. System.out.println(li.toString());
  19. Randomrnd=newRandom(2);//给定随机种子
  20. for(intj=1;j<=3;j++){
  21. collections.shuffle(li);
  22. System.out.println(li.toString());
  23. Collections.shuffle(li,rnd);
  24. System.out.println(”addrnd:”+li.toString());
  25. }
  26. }
  27. }

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Random;

/*
 *Created on 2015年12月23日
 *Copyright 2015 Yong Cai Limited crop. All Rights Reserved
 *
 */

public class CollectionShuffle {

    public static void main(String[] args) {
        List<Integer> li = new ArrayList<Integer>();
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i=0;i < 10;i++){
            li.add(i);
        }

        System.out.println(li.toString());
        Random rnd = new Random(2);//给定随机种子
        for(int j=1;j <= 3;j++){
            Collections.shuffle(li);
            System.out.println(li.toString());
            Collections.shuffle(li, rnd);
            System.out.println("add rnd:"+li.toString());
        }

    }

}

输出结果:

[java] view plain copy print?

  1. [0,1,2,3,4,5,6,7,8,9]
  2. [7,3,8,4,0,5,1,2,9,6]
  3. addrnd:[8,3,6,5,7,4,0,2,1,9]
  4. [2,3,8,9,7,6,5,0,1,4]
  5. addrnd:[4,6,3,0,7,5,2,9,8,1]
  6. [9,2,8,7,0,5,3,6,1,4]
  7. addrnd:[2,0,6,7,8,3,5,4,1,9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[7, 3, 8, 4, 0, 5, 1, 2, 9, 6]
add rnd:[8, 3, 6, 5, 7, 4, 0, 2, 1, 9]
[2, 3, 8, 9, 7, 6, 5, 0, 1, 4]
add rnd:[4, 6, 3, 0, 7, 5, 2, 9, 8, 1]
[9, 2, 8, 7, 0, 5, 3, 6, 1, 4]
add rnd:[2, 0, 6, 7, 8, 3, 5, 4, 1, 9]

shuffle()方法的源代码如下:

[java] view plain copy print?

  1. publicstaticvoidshuffle(List<?>list){
  2. if(r==null){
  3. r=newRandom();
  4. }
  5. shuffle(list,r);
  6. }
  7. privatestaticRandomr;
  8. publicstaticvoidshuffle(List<?>list,Randomrnd){
  9. intsize=list.size();
  10. if(size<SHUFFLE_threshold||listinstanceofRandomAccess){
  11. for(inti=size;i>1;i–)
  12. swap(list,i-1,rnd.nextint(i));
  13. }else{
  14. Objectarr[]=list.toArray();
  15. //Shufflearray
  16. for(inti=size;i>1;i–)
  17. swap(arr,i-1,rnd.nextInt(i));
  18. //Dumparraybackintolist
  19. ListIteratorit=list.listIterator();
  20. for(inti=0;i<arr.length;i++){
  21. it.next();
  22. it.set(arr[i]);
  23. }
  24. }
  25. }

   public static void shuffle(List<?> list) {
        if (r == null) {
            r = new Random();
        }
        shuffle(list, r);
    }
    private static Random r;


    public static void shuffle(List<?> list, Random rnd) {
        int size = list.size();
        if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
            for (int i=size; i>1; i--)
                swap(list, i-1, rnd.nextInt(i));
        } else {
            Object arr[] = list.toArray();

            // Shuffle array
            for (int i=size; i>1; i--)
                swap(arr, i-1, rnd.nextInt(i));

            // Dump array back into list
            ListIterator it = list.listIterator();
            for (int i=0; i<arr.length; i++) {
                it.next();
                it.set(arr[i]);
            }
        }
    }

转载自http://blog.csdn.net/caiandyong/article/details/50389741

相关阅读

视频去水印方法总结

视频去水印方法总结 从素材网站下载的视频大多都留有水印,使用这些视频对使用者有较大干扰,很不方便,需要运用一定的方法尽可能去掉

微信恢复聊天记录:三种实用又有效的恢复方法

微信怎么恢复聊天记录?现在微信日活跃用户趋近10亿,超过50%用户每天使用时长超过90分钟,可以说是微信构建了我们的社交圈,生活中我们

Oracle数据库的Row_number() over()使用方法

1.原始数据(部分)SELECT * FROM SCOTT.EMP ; 2.使用Row_number() over() 函数,排序SELECT EMPNO,ENAME,SAL,DEPTNO,Row_number()

阿里巴巴iconfont字体图标使用方法

iconfont字体图标的使用方法--超简单!这里讲解的默认是元素使用类名;step 1:百度iconfont,找到阿里巴巴矢量图标库官网,然后注册

Android使用AttributeSet自定义控件的方法

当系统提供的控件,无法满足我们的需求的时候,我们往往会 想到自定义控件,通过继承View来实现。当我们想像 系统提供的控件那样可以如

分享到:

栏目导航

推荐阅读

热门阅读