博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Collections的随机排序
阅读量:4188 次
发布时间:2019-05-26

本文共 1734 字,大约阅读时间需要 5 分钟。

import java.util.ArrayList;
2.import java.util.List;
3.import java.util.ListIterator;
4.import java.util.Random;
5.import java.util.RandomAccess;
6.
7.import org.junit.Test;
8./**
9. * Collections随机排序
10. *
11. */
12.public class CollectionsShuffle {
13.
14. private static Random r;
15. private static final int SHUFFLE_THRESHOLD = 5;
16.
17. public static void shuffle(List<?> list) {
18. if (r == null) {
19. r = new Random();
20. }
21. shuffle(list, r);
22. }
23.
24. public static void shuffle(List<?> list, Random rnd) {
25. int size = list.size();
26. if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
27. for (int i = size; i > 1; i--)
28. swap(list, i - 1, rnd.nextInt(i));
29. } else {
30. Object arr[] = list.toArray();
31.
32. for (int i = size; i > 1; i--)
33. swap(arr, i - 1, rnd.nextInt(i));
34.
35. ListIterator it = list.listIterator();
36. for (int i = 0; i < arr.length; i++) {
37. it.next();
38. it.set(arr[i]);
39. }
40. }
41. }
42.
43. public static void swap(List<?> list, int i, int j) {
44. final List l = list;
45. l.set(i, l.set(j, l.get(i)));
46. }
47.
48. private static void swap(Object[] arr, int i, int j) {
49. Object tmp = arr[i];
50. arr[i] = arr[j];
51. arr[j] = tmp;
52. }
53.
54.
55. //初始化List
56. public List<Integer> initList(){
57. List<Integer> list = new ArrayList<Integer>();
58. list.add(1);
59. list.add(2);
60. list.add(3);
61. list.add(4);
62. list.add(5);
63. list.add(6);
64. list.add(7);
65. list.add(8);
66. list.add(9);
67. return list;
68. }
69.
70. //测试Collections随机排序
71. @Test
72. public void testShuffle(){
73. List<Integer> list = initList();
74. shuffle(list, new Random());
75. for (Integer value : list) {
76. System.out.println(value);
77. }
78. }
79.
80.}

转载地址:http://bknoi.baihongyu.com/

你可能感兴趣的文章
创建完全可编辑的 DataGrid
查看>>
在ASP.NET中上传图片并生成缩略图
查看>>
在ASP.NET中执行URL重写经典方案
查看>>
安装部署中的数据库打包和快捷方式启动浏览器
查看>>
ASP.NET 2.0 中实现模板中的数据绑定系列(2)
查看>>
ASP.NET 2.0 中实现模板中的数据绑定系列
查看>>
asp.net ajax 和 asp.net 2.0中的fileupload合力打造无刷新
查看>>
用Asp隐藏文件路径实现防盗链
查看>>
浅谈Asp.net 多层架构中的变量引用与传递
查看>>
无限级联动菜单-AJAX版(附源码下载)
查看>>
Photoshop 入门十战
查看>>
Solaris上的虚拟化技术
查看>>
VMware虚拟化技术简介
查看>>
尚未形成统一标准的多种虚拟化项目
查看>>
KVM虚拟化常见问题
查看>>
服务器虚拟化技术现状
查看>>
双核服务器使虚拟化应用更加简单
查看>>
服务器虚拟化成为流行趋势
查看>>
早期的虚拟化技术雏形
查看>>
chinacache解决方案——静态内容加速
查看>>