如何打乱List 或 Array元素的顺序
打乱List或者Array数据元素的顺序,其实就是让集合中的元素变得随机,举个例子,有如下一个Array数据:
其中存储了 1, 2, 3, 4, 5 一共五个元素,经过程序随机排序后得到另外一个随机乱序的数组。
其Java实现代码如下:
public class ArrayRandomUtils {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5};
arr = randomArr(arr);
System.out.println(Arrays.toString(arr));
}
public static int[] randomArr(int[] arr) {
int[] arrTemp = new int[5];
int end = arr.length;
Random rad = new Random();
for (int i = 0; i < arr.length; i++) {
int index = rad.nextInt(end);
arrTemp[i] = arr[index];
arr[index] = arr[end - 1];
end--;
}
return arrTemp;
}
}
实现思路如下:
1、随机生成一个原数组长度内的随机整数 index;
2、将随机位置 index 上的元素拷贝到新数组的第 i 个位置;
3、然后,将原数组中第 end(end的初始值为原数组的长度) 个元素拷贝至原数组的第 index 位置;
4、最后,将 end– 相当于原数组的一个元素已经被随机到了新数组中。
处理流程:
Collections 洗牌算法源码
了解了以上数组元素随机打乱的算法之后,再来看一下Collections 的 shuffle 方法的源码就很好理解了。
public static void shuffle(List<?> list) {
Random rnd = r;
if (rnd == null)
r = rnd = new Random();
shuffle(list, rnd);
}
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]);
}
}
}
相关推荐
C# Array和ArrayList,List区别
这时就需要以相同的顺序打乱两个list,那么在python中如何实现呢?可以通过设置相同的随机种子,再shuffle的方式来实现。 代码如下: import random randnum = random.randint(0,100) random.seed(randnum)
javascript array list into setjavascript array list into setjavascript array list into setjavascript array list into setjavascript array list into setjavascript array list into setjavascript array ...
3、 get_list表示读取顺序表中的元素 4、 search_list表示输入元素后,返回元素在表中的位置 5、 search_list1输入位置,返回相应的元素 6、 before_list求元素的前驱 7、 next_list求元素的后继 8、 paixu_list对...
以上这篇python 寻找list中最大元素对应的索引方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:python numpy和list查询其中某个数的个数及定位方法...
#ifndef __LIST_H__ #define __LIST_H__ struct list; struct list *list_init(); void list_free(struct list *list); int list_isempty(struct list *list); void list_clear(struct list *list); int list_...
本文实例讲述了C#实现将数组内元素打乱顺序的方法。分享给大家供大家参考。具体如下: 1.泛型类代码 //泛型类 class Item { T[] item; //构造函数 public Item(T[] obj) { item = new T[obj.Length]; for ...
int[] arr = { 1, 2, 2, 3, 3, 4, 4, 4, 1, 5, 6, 6, 6 }; 两种不同方式(使用map和list两种方式)获得一下输出结果 数组和list 可以使用相同的方法,自己测试可以 控制台输出 ...数组中唯一的元素是:5
主要介绍了Python中list以及list与array的相互转换实现方法,简单分析了Python中list的功能、使用方法及list与array相互转换实现技巧,需要的朋友可以参考下
list 元素循环比较list 元素循环比较list 元素循环比较list 元素循环比较list 元素循环比较list 元素循环比较
java获取list中两元素时间差
构造顺序表List,要求顺序表上各元素按照递增的顺序排列,在List上插入元素X,要求保持线性表的有序性
线性表的两种实现方法array-based list以及singly linked list,实现他们的类型定义 给顺序表和链表的实现分别使用添加成员函数以及对象的应用两种方法实现线性表中元素的逆置(reverse)和单个元素移动到特定位置的...
主要介绍了C#遍历List并删除某个元素的方法,实例分析了正序与倒序遍历list及删除元素的使用技巧,需要的朋友可以参考下
java List、Set与Array之间的相互转换 java List、Set与Array之间的相互转换
第 05 节_GEE 的数据类型(Dictionary,List,Array).pdf
此文件搭配本人发表的文章:C#list集合按元素出现次数排序取值(含去重功能),资源完全免费下载,不收取任何费用,纯粹的技术交流。联系方式在文章中有,喜欢的朋友们可以互相交流一下。
如下所示: import re word = test s = test abcdas test 1234 testcase testsuite ... 您可能感兴趣的文章:Python 查找list中的某个元素的所有的下标方法python 获取list特定元素下标的实例讲解python
Hibernate常见集合映射(Set,List_Array,Map,Bag)