Java Collections.shuffle()方法及示例
集合类的shuffle()方法正如该类的名字所示,存在于被称为java.util的实用程序包中,用于洗刷列表中的元素。
在我们的程序中,有 两种方法 可以用来实现,如下所示。
- 使用预先定义的随机性源
- 使用用户提供的随机性来源
方法1: 使用预定义的随机性源对一个给定的列表进行洗牌。
语法
抛出的异常: 如果给定的 list 或其 list-iterator 不支持 set 操作,则抛出 UnsupportedOperationException 。
例子
输出
方法2: 使用用户提供的随机性源对给定的列表进行洗牌。
这里提供了一个额外的参数,上面指定的”rndm”是用来洗牌的随机性来源。
语法
参数: 这里它需要两个参数,列在
- mylist
- rndm
异常: 如果指定的列表或其列表迭代器不支持set操作,则出现UnsupportedOperationException。
例子
输出
但是,在实现这个方法之前,请记住下面列出的某些要点 ,如下图 ,如下图 。
- 内部工作: 这个方法随机地在一个列表中随机地排列元素。
- 运行时间: 它以线性时间运行。
- 对元素的访问。
- 它向后遍历列表,从最后一个元素到第二个元素,重复地将一个随机选择的元素交换到其 “当前位置”。
- 此后,从列表中从第一个元素到当前位置的部分随机选择元素,包括在内。
注意: 如果提供的列表没有实现RandomAccess接口,就像LinkedList一样,并且很大,它首先将列表复制到一个数组中,然后对数组的副本进行洗牌,最后将数组复制回列表中。这样可以确保时间保持线性。