Java中的集合
Java LinkedList指南
Java ArrayList指南
Java中不可變的ArrayList
CopyOnWriteArrayList指南
JavaJava中的多維ArrayList
將迭代器轉換為列表
Java –從列表中獲取隨機項目/元素
用Java對列表進行分區
從Java列表中刪除所有Null
從Java中的列表中刪除所有重複項
檢查Java中兩個列表是否相等
如何使用Java在列表中查找元素
Java列表UnsupportedOperationException
將列表複製到Java中的另一個列表
從列表中刪除所有出現的特定值
將多個元素添加到Java ArrayList
從列表中刪除第一個元素
在Java中迭代列表的方法
Java中兩個列表的交集
如何計算Arraylist中的重複元素
查找Java中兩個列表之間的差異
Java中的shuffle洗牌集合
1.概述
在這篇快速的文章中,我們將看到如何用Java改組一個集合。 Java有一個內置的方法用於改組List對象-我們還將在其他集合中使用它。
2.改組列表
我們將使用方法java.util.Collections.shuffle ,該方法將List作為輸入並就地進行隨機排序。就地而言,我們的意思是它將與輸入中傳遞的列表進行混排,而不是使用混排的元素創建一個新列表。
讓我們看一個簡單的示例,該示例顯示如何對List進行隨機播放:
List<String> students = Arrays.asList("Foo", "Bar", "Baz", "Qux");
Collections.shuffle(students);
還有第二個版本的java.util.Collections.shuffle ,它也接受自定義隨機性源作為輸入。如果我們對應用程序有這樣的要求,則可以使用它來確定改組過程。
讓我們使用第二個變體在兩個列表上實現相同的改組:
List<String> students_1 = Arrays.asList("Foo", "Bar", "Baz", "Qux");
List<String> students_2 = Arrays.asList("Foo", "Bar", "Baz", "Qux");
int seedValue = 10;
Collections.shuffle(students_1, new Random(seedValue));
Collections.shuffle(students_2, new Random(seedValue));
assertThat(students_1).isEqualTo(students_2);
當使用相同的隨機源(從相同的種子值初始化)時,兩個隨機產生的隨機數序列將相同。因此,在改組後,兩個列表都將包含完全相同順序的元素。
3.無序集合的重排元素
例如,我們可能還希望改組其他集合,例如Set,Map或Queue ,但是所有這些集合都是無序的,它們不維護任何特定的順序。
某些實現(例如LinkedHashMap或帶有比較器的Set)確實會保持固定順序,因此我們也無法對其進行洗牌。
但是,我們仍然可以通過將它們首先轉換為List ,然後將這個List改組為隨機訪問它們的元素。
讓我們看一下一個Map元素重排的簡單示例:
Map<Integer, String> studentsById = new HashMap<>();
studentsById.put(1, "Foo");
studentsById.put(2, "Bar");
studentsById.put(3, "Baz");
studentsById.put(4, "Qux");
List<Map.Entry<Integer, String>> shuffledStudentEntries
= new ArrayList<>(studentsById.entrySet());
Collections.shuffle(shuffledStudentEntries);
List<String> shuffledStudents = shuffledStudentEntries.stream()
.map(Map.Entry::getValue)
.collect(Collectors.toList());
類似地,我們可以隨機播放Set的元素:
Set<String> students = new HashSet<>(
Arrays.asList("Foo", "Bar", "Baz", "Qux"));
List<String> studentList = new ArrayList<>(students);
Collections.shuffle(studentList);
4。結論
在本快速教程中,我們了解瞭如何使用java.util.Collections.shuffle來隨機播放Java中的各種集合。
這自然可以直接與List一起使用,我們也可以間接利用它來隨機化其他集合中元素的順序。我們還可以通過提供自定義的隨機性來源並使其具有確定性來控制改組過程。
和往常一樣,本文演示的所有代碼都可以在GitHub上獲得。