import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import java.util.Random; import java.util.RandomAccess; import org.junit.Test; /** * Collections随机排序 * */ public class CollectionsShuffle { private static Random r; private static final int SHUFFLE_THRESHOLD = 5; public static void shuffle(List<?> list) { if (r == null) { r = new Random(); } shuffle(list, r); } 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(); for (int i = size; i > 1; i--) swap(arr, i - 1, rnd.nextInt(i)); ListIterator it = list.listIterator(); for (int i = 0; i < arr.length; i++) { it.next(); it.set(arr[i]); } } } public static void swap(List<?> list, int i, int j) { final List l = list; l.set(i, l.set(j, l.get(i))); } private static void swap(Object[] arr, int i, int j) { Object tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } //初始化List public List<Integer> initList(){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); list.add(8); list.add(9); return list; } //测试Collections随机排序 @Test public void testShuffle(){ List<Integer> list = initList(); shuffle(list, new Random()); for (Integer value : list) { System.out.println(value); } } }
相关推荐
本篇文章将详细探讨C#中实现数组的随机排序的方法,以及相关的编程技巧。 随机排序不同于常见的升序或降序排序,它是指数组中的元素被随机地重新排列,每个元素都有相等的概率出现在数组的任何位置。这种排序方式在...
- 随机点名的核心在于生成一个不重复的随机序列,常用的方法是使用编程语言中的随机数生成函数,如Python的`random.sample()`或Java的`Collections.shuffle()`。这些函数能确保在给定的范围内生成一个无偏的随机...
`shuffle(List<?> list)`则随机打乱集合元素的顺序,通常用于游戏或测试场景。 2. **集合转换**:`reverse(List<?> list)`将列表中的元素顺序反转。`copy(List<? super T> dest, List<? extends T> src)`可以将一个...
例如,使用`Collections.shuffle()`方法可以随机打乱牌的顺序,而牌型比较可能需要用到条件语句和循环结构。 此外,为了保证游戏的公平性和可玩性,源码中可能包含了错误处理和异常处理机制,例如防止玩家出牌超出...
洗牌是随机打乱牌的顺序,通常通过`Collections.shuffle()`实现,它使用了Fisher-Yates(Knuth)洗牌算法。发牌则涉及到将洗好的牌平均分配给三个玩家,需要注意的是,发牌过程应确保每个玩家得到的牌是连续且无...
4. **集合操作方法**:Collections类提供了丰富的静态方法,如`sort()`, `reverse()`, `shuffle()`, `copy()`, `binarySearch()`等,用于排序、反转、随机化、复制和搜索集合元素。 5. **并发集合**:Java提供了...
使用`Collections.shuffle`方法对`desk`列表进行随机排序,即模拟洗牌过程。 ### 8. 发牌逻辑 ```java for (int i = 0; i ; i++) { System.out.println(perHand(desk, cardPerHand)); } ``` - 通过循环调用`...
Collections类中的shuffle方法用于将指定的列表进行随机排序。它是一个静态方法,可以将ArrayList中的牌顺序进行随机打乱,模拟洗牌的过程。 ### 3. 斗地主牌组的构建 在Java代码中,我们首先定义了两个ArrayList:...
- shuffle:随机排列集合。 - reverse:反转集合中元素的顺序。 - sort:排序集合中的元素,排序基于元素的自然顺序或自定义比较器。 - binarySearch:使用二分搜索法查找指定值。 7. **并发集合类**:在多线程...
此外,`Collections`类提供了一些方便的方法来操作链表,如`sort()`进行排序,`shuffle()`进行随机排列。 7. **应用场景** - 队列实现:由于`LinkedList`支持在两端进行插入和删除,所以常用于实现FIFO(先进先出...
- 为了模拟真实的洗牌过程,使用了`Collections.shuffle()`方法对存储牌编号的`ArrayList` `pookerNumber`进行随机打乱,确保每一轮游戏开始时,牌的顺序都是不确定的。 3. **发牌**: - 发牌是通过遍历打乱后的...
洗牌则需要对数组或集合进行随机排序,可以利用Java的`Collections.shuffle()`方法。比较牌型则涉及到对扑克牌的逻辑判断,例如同花顺、四条、葫芦等,这需要编写一系列的条件判断语句。 在用户交互方面,Java的`...