Collections.shuffle()方法实例解析

作者:_calm 时间:2021-09-17 18:51:38 

本文研究的主要是Collections.shuffle()方法的相关内容,下面看看具体内容。

Java.util.Collections类下有一个静态的shuffle()方法,如下:

1)static void shuffle(List<?> list) 使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的。

2)static void shuffle(List<?> list, Random rand) 使用指定的随机源对指定列表进行置换,所有置换发生的可能性都是大致相等的,假定随机源是公平的。

通俗一点的说,就像洗牌一样,随机打乱原来的顺序。

注意:如果给定一个整型数组,用Arrays.asList()方法将其转化为一个集合类,有两种途径:

1)用List<Integer> list=ArrayList(Arrays.asList(ia)),用shuffle()打乱不会改变底层数组的顺序。

2)用List<Integer> list=Arrays.aslist(ia),然后用shuffle()打乱会改变底层数组的顺序。代码例子如下:


package ahu;
import java.util.*;
public class Modify {
public static void main(String[] args){
Random rand=new Random(47);
Integer[] ia={0,1,2,3,4,5,6,7,8,9};
List<Integer> list=new ArrayList<Integer>(Arrays.asList(ia));
System.out.println("Before shufflig: "+list);
Collections.shuffle(list,rand);
System.out.println("After shuffling: "+list);
System.out.println("array: "+Arrays.toString(ia));
List<Integer> list1=Arrays.asList(ia);
System.out.println("Before shuffling: "+list1);
Collections.shuffle(list1,rand);
System.out.println("After shuffling: "+list1);
System.out.println("array: "+Arrays.toString(ia));
}
}

运行结果如下:


Before shufflig: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
After shuffling: [3, 5, 2, 0, 7, 6, 1, 4, 9, 8]
array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Before shuffling: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
After shuffling: [8, 0, 5, 2, 6, 1, 4, 9, 3, 7]
array: [8, 0, 5, 2, 6, 1, 4, 9, 3, 7]

在第一种情况中,Arrays.asList()的输出被传递给了ArrayList()的构造器,这将创建一个引用ia的元素的ArrayList,因此打乱这些引用不会修改该数组。 但是,如果直接使用Arrays.asList(ia)的结果, 这种打乱就会修改ia的顺序。意识到Arrays.asList()产生的List对象会使用底层数组作为其物理实现是很重要的。 只要你执行的操作 会修改这个List,并且你不想原来的数组被修改,那么你就应该在另一个容器中创建一个副本。

来源:http://blog.csdn.net/u011514810/article/details/51218784

标签:java,collections.shuffle
0
投稿

猜你喜欢

  • 详解feign调用session丢失解决方案

    2021-08-29 20:38:20
  • 解决Spring使用@MapperScan问题

    2021-11-01 23:55:13
  • c#中task与thread区别及其使用的方法示例

    2021-08-06 13:59:10
  • SpringMVC使用ResponseEntity实现文件上传下载

    2023-08-20 02:10:58
  • C#实现导出List数据到xml文件的方法【附demo源码下载】

    2022-02-13 10:32:14
  • Base64编码解码原理及C#编程实例

    2022-05-07 03:58:53
  • Android编程开发之在Canvas中利用Path绘制基本图形(圆形,矩形,椭圆,三角形等)

    2021-11-16 03:28:09
  • C# 多网卡 Server Listen

    2022-05-30 16:09:18
  • C#启动进程的几种常用方法

    2023-06-18 04:13:48
  • Java执行cmd命令两种实现方法解析

    2022-09-24 02:43:49
  • spring boot metrics监控指标使用教程

    2022-01-10 08:42:16
  • Android 实现全屏显示的几种方法整理

    2022-05-09 03:21:01
  • winform 实现控制输入法

    2022-05-01 11:35:38
  • 关于各种排列组合java算法实现方法

    2023-11-15 05:46:55
  • 详解C#中检查null的语法糖

    2023-08-12 11:20:08
  • Java算法之时间复杂度和空间复杂度的概念和计算

    2023-06-11 17:47:56
  • Jenkins初级应用之Invoke Phing targets插件配置

    2023-10-14 03:55:56
  • 解决IDEA中maven导入jar包一直报错问题

    2021-12-26 11:52:22
  • 解析C#中的常量及如何在C#编程中定义常量

    2022-03-20 22:58:36
  • java 对象输入输出流读写文件的操作实例

    2021-06-13 15:24:30
  • asp之家 软件编程 m.aspxhome.com