如何打乱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]);
}
}
}
相关推荐
Java的Collections类提供了一个名为shuffle()的方法,可以用来随机打乱列表中的元素顺序。对于数组,我们可以先将其转换为ArrayList,然后打乱,再遍历输出。代码如下: ```java Integer[] array = {...}; // ...
* 排序(Sort):使用sort方法可以根据元素的自然顺序对指定列表按升序进行排序。 * 混排(Shuffling):使用shuffle方法可以打乱在一个List中的任何排列的踪迹。 * 反转(Reverse):使用reverse方法可以根据元素的...
"js刷新随机排列展示代码"提供了一种解决方案,适用于个人信息展示或商品展示等场景,让元素每次加载时都以不同的顺序呈现,增加视觉新鲜感。 首先,我们需要理解随机排列的核心原理。在JavaScript中,我们可以使用...
- **shuffle()**: 打乱数组中的元素顺序。 - **array_reverse()**: 反转数组中的元素顺序。 - **array_multisort()**: 同时对多个数组进行排序。 #### 获取部分(Part) 这些函数用于从数组中获取部分数据或处理...
这意味着它不会创建新的列表,而是直接修改输入的列表,将元素的顺序随机打乱。源码如下: ```java public static void shuffle(List<?> list, Random r) { int size = list.size(); if (size || list instanceof...
6. 其他操作:`array_rand()`选取随机元素,`shuffle()`打乱数组顺序,`array_sum()`计算数组元素总和,`range()`创建包含等差序列的数组。 在操作PHP数组时需注意: 1. 使用"+"运算符合并数组,不会覆盖重复键值。...
- `array_rand()`从数组中随机选择一个或多个元素。 - `shuffle()`随机打乱数组。 - `array_sum()`计算数组所有值的和。 - `range()`创建一个包含指定范围的数组。 六、操作数组的注意事项 1. 数组运算符号:...
- **`array_reverse()`**: 反转数组中的元素顺序。 - **`array_search()`**: 在数组中搜索给定的值,返回相应的键名。 - **`array_shift()`**: 移除数组的第一个元素,并返回被移除的元素。 - **`array_slice()`**: ...
- **shuffle()**:打乱数组顺序。 - **print_r()**:打印关于变量的易于理解的信息。 - **var_dump()**:打印变量的相关信息。 ##### 4. 实例代码 下面是一些示例代码,用于演示如何使用PHP数组函数: - **判断...
- **定义与用途**:打乱数组中元素的顺序。 - **函数原型**: ```php void shuffle(array &$array); ``` - **参数说明**: - `$array`:要打乱顺序的数组。 - **返回值**:无。 **23. `sizeof`** - **定义...
- **功能**:反转数组中的元素顺序。 - **示例**:`$reversed = array_reverse($arr);` 32. **array_search** - **功能**:在数组中搜索给定的值,如果找到,则返回相应的键名。 - **示例**:`$key = array_...
要随机打乱列表中元素的顺序,可以使用`Collections.shuffle()`方法: ```java Collections.shuffle(list); System.out.println(list); ``` 这将使用伪随机数生成器重新排列列表中的元素。 在Java中,`...
17. **`shuffle`**: 随机打乱数组元素的顺序。 18. **`sizeof`** 或 **`count`**: 相同功能,返回数组元素的数量。 19. **`sort`**: 对数组按值进行升序排序。 20. **`uasort`, `uksort`, `usort`**: 分别按照...
- `shuffle`:随机打乱数组的顺序。 - `sizeof`:获取数组的大小(等同于`count()`)。 - `sort`:按升序对数组进行排序。 - `uasort`:根据用户自定义的函数对数组的值进行排序。 - `uksort`:根据用户自定义...
`current`),`prev`(将内部指针向前移动),`range`(创建一个包含指定范围数字的数组),`reset`(将内部指针重置到数组的第一个元素),`rsort`(按降序排序数组的值),`shuffle`(随机打乱数组的顺序),...
为了打乱数组的元素顺序,可以使用`numpy.random.shuffle()`方法。这是机器学习和数据处理中常用的方法,以确保数据集的随机性。 Numpy还提供了计算二维数组某一行或某一列的最大值和最小值的功能。这些方法如`min...
洗牌的目的是为了打乱一个序列的原有顺序,使其变得无规律,从而达到随机化的效果。在这个主题中,我们将深入探讨几种可用于洗牌的算法,并重点以Java语言为例进行说明。 首先,最经典的洗牌算法是Fisher-Yates(也...
- `shuffle()`随机打乱数组的顺序。 - `asort()`按照值对数组进行升序排序,同时保持键的关联。 - `arsort()`按照值对数组进行降序排序,同时保持键的关联。 - `ksort()`按照键的顺序对数组进行升序排序。 - `...
这种方法首先创建一个从1到50的整数数组,然后使用`shuffle`函数将其顺序打乱,最后通过`array_slice`截取前 `$num` 个元素,以得到不重复的随机数。 **方法二:结合`srand`和`each`** ```php $numbers = range(1, ...