java-Collections类中shuffle的用法
来源:互联网 发布:访客网络应该限速多少 编辑:程序博客网 时间:2024/06/10 13:04
用于打乱List中个元素的排序顺序,实现“洗牌”的效果。
先看下源码:
public class Collections { 2 private static Random r; 3 private static final int SHUFFLE_THRESHOLD = 5; 4 5 public static void shuffle(List<?> list) { 6 if (r == null) { 7 r = new Random(); 8 } 9 shuffle(list, r);10 }11 12 public static void shuffle(List<?> list, Random rnd) {13 int size = list.size();14 if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {15 for (int i = size; i > 1; i--)16 swap(list, i - 1, rnd.nextInt(i));17 } else {18 Object arr[] = list.toArray();19 20 // Shuffle array21 for (int i = size; i > 1; i--)22 swap(arr, i - 1, rnd.nextInt(i));23 24 // Dump array back into list25 ListIterator it = list.listIterator();26 for (int i = 0; i < arr.length; i++) {27 it.next();28 it.set(arr[i]);29 }30 }31 }32 33 public static void swap(List<?> list, int i, int j) {34 final List l = list;35 l.set(i, l.set(j, l.get(i)));36 }37 38 private static void swap(Object[] arr, int i, int j) {39 Object tmp = arr[i];40 arr[i] = arr[j];41 arr[j] = tmp;42 }43 44 }
示例:
- // ShuffleTest.java
- import java.util.*;
- public class ShuffleTest {
- public static void main(String[] args) {
- List<Integer> list = new ArrayList<Integer>();
- for (int i = 0; i < 10; i++)
- list.add(new Integer(i));
- System.out.println("打乱前:");
- System.out.println(list);
- for (int i = 0; i < 5; i++) {
- System.out.println("第" + i + "次打乱:");
- Collections.shuffle(list);
- System.out.println(list);
- }
- }
- }
输出结果:
打乱前:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
第0次打乱:
[6, 3, 2, 0, 8, 1, 7, 5, 4, 9]
第1次打乱:
[6, 2, 3, 0, 8, 5, 7, 4, 9, 1]
第2次打乱:
[1, 7, 9, 4, 6, 0, 2, 5, 3, 8]
第3次打乱:
[0, 4, 2, 8, 9, 1, 3, 7, 5, 6]
第4次打乱:
[8, 1, 3, 0, 7, 9, 4, 2, 5, 6]
摘自:http://topic.csdn.net/u/20080308/17/642f73e3-ff7b-4144-a52b-190a72be1e49.html
0 0
- java-Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法
- JAVA的Collections类中shuffle的用法 (将列表值打乱顺序)
- JAVA:Collections类的shuffle()方法
- JAVA:Collections类的shuffle()方法
- java 中 Collections 的用法
- java中容易忽略的shuffle用法
- java中容易忽略的shuffle用法
- java中Collections.sort的用法
- java Collections 的用法
- java.util.Collections 类的常见用法
- Java 集合,Collections工具类的用法
- java容器--java.util.Arrays与java.util.Collections类中sort()的用法(转)
- 正则表达式语法详解
- 58同城推荐系统架构设计与实现
- Quartz2D:图形上下文栈
- 2168 防守阵地 I(简单数学题)
- 【HttpClient4.5实训】一.HttpClient4.5模拟浏览器GET请求访问新浪网(非原文教程)
- java-Collections类中shuffle的用法
- LINUX1——Linux 查找指定名称的进程并显示进程详细信息
- 【HttpClient4.5中文教程】【第一章 :基础】1.1执行请求(三)
- Java 异常处理
- iOS开发见闻-第4期
- FZU 2168
- 从头认识java-6.2 继承(Generalization)(2)
- Java多线程
- 【HttpClient4.5中文教程】【第一章 :基础】1.2 HttpClient接口