Collections.shuffle()方法實(shí)例解析
本文研究的主要是Collections.shuffle()方法的相關(guān)內(nèi)容,下面看看具體內(nèi)容。
Java.util.Collections類下有一個(gè)靜態(tài)的shuffle()方法,如下:
1)static void shuffle(List<?> list) 使用默認(rèn)隨機(jī)源對列表進(jìn)行置換,所有置換發(fā)生的可能性都是大致相等的。
2)static void shuffle(List<?> list, Random rand) 使用指定的隨機(jī)源對指定列表進(jìn)行置換,所有置換發(fā)生的可能性都是大致相等的,假定隨機(jī)源是公平的。
通俗一點(diǎn)的說,就像洗牌一樣,隨機(jī)打亂原來的順序。
注意:如果給定一個(gè)整型數(shù)組,用Arrays.asList()方法將其轉(zhuǎn)化為一個(gè)集合類,有兩種途徑:
1)用List<Integer> list=ArrayList(Arrays.asList(ia)),用shuffle()打亂不會(huì)改變底層數(shù)組的順序。
2)用List<Integer> list=Arrays.aslist(ia),然后用shuffle()打亂會(huì)改變底層數(shù)組的順序。代碼例子如下:
package ahu; import java.util.*; public class Modify { public static void main(String[] args){ Random rand=new Random(47); Integer[] ia={0,1,2,3,4,5,6,7,8,9}; List<Integer> list=new ArrayList<Integer>(Arrays.asList(ia)); System.out.println("Before shufflig: "+list); Collections.shuffle(list,rand); System.out.println("After shuffling: "+list); System.out.println("array: "+Arrays.toString(ia)); List<Integer> list1=Arrays.asList(ia); System.out.println("Before shuffling: "+list1); Collections.shuffle(list1,rand); System.out.println("After shuffling: "+list1); System.out.println("array: "+Arrays.toString(ia)); } }
運(yùn)行結(jié)果如下:
Before shufflig: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] After shuffling: [3, 5, 2, 0, 7, 6, 1, 4, 9, 8] array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Before shuffling: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] After shuffling: [8, 0, 5, 2, 6, 1, 4, 9, 3, 7] array: [8, 0, 5, 2, 6, 1, 4, 9, 3, 7]
在第一種情況中,Arrays.asList()的輸出被傳遞給了ArrayList()的構(gòu)造器,這將創(chuàng)建一個(gè)引用ia的元素的ArrayList,因此打亂這些引用不會(huì)修改該數(shù)組。 但是,如果直接使用Arrays.asList(ia)的結(jié)果, 這種打亂就會(huì)修改ia的順序。意識(shí)到Arrays.asList()產(chǎn)生的List對象會(huì)使用底層數(shù)組作為其物理實(shí)現(xiàn)是很重要的。 只要你執(zhí)行的操作 會(huì)修改這個(gè)List,并且你不想原來的數(shù)組被修改,那么你就應(yīng)該在另一個(gè)容器中創(chuàng)建一個(gè)副本。
總結(jié)
以上就是本文關(guān)于Collections.shuffle()方法實(shí)例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
- MyBatis直接執(zhí)行SQL的工具SqlMapper
- 詳解MyBatis開發(fā)Dao層的兩種方式(Mapper動(dòng)態(tài)代理方式)
- 淺談MyBatis通用Mapper實(shí)現(xiàn)原理
- Spring Boot集成MyBatis實(shí)現(xiàn)通用Mapper的配置及使用
- 詳解Mybatis通用Mapper介紹與使用
- Spring Boot整合mybatis并自動(dòng)生成mapper和實(shí)體實(shí)例解析
- JavaScript實(shí)現(xiàn)shuffle數(shù)組洗牌操作示例
- php使用str_shuffle()函數(shù)生成隨機(jī)字符串的方法分析
- PHP 將數(shù)組打亂 shuffle函數(shù)的用法及簡單實(shí)例
- MapTask階段shuffle源碼分析
相關(guān)文章
Elasticsearch查詢之Term?Query示例解析
這篇文章主要為大家介紹了Elasticsearch查詢之Term?Query示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04SpringBoot集成pf4j實(shí)現(xiàn)插件開發(fā)功能的代碼示例
pf4j是一個(gè)插件框架,用于實(shí)現(xiàn)插件的動(dòng)態(tài)加載,支持的插件格式(zip、jar),本文給大家介紹了SpringBoot集成pf4j實(shí)現(xiàn)插件開發(fā)功能的示例,文中通過代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下2024-07-07JAVA操作MongoDB數(shù)據(jù)庫實(shí)例教程
MongoDB是一個(gè)文檔型數(shù)據(jù)庫,是NOSQL家族中最重要的成員之一,下面這篇文章主要給大家介紹了關(guān)于JAVA操作MongoDB數(shù)據(jù)庫的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼(前端部分)
這篇文章主要為大家介紹了如何用Java語言實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼的生成(前端部分),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下2022-10-10SpringBoot整合FastDFS中間件實(shí)現(xiàn)文件分布管理
FastDFS是一個(gè)開源的輕量級(jí)分布式文件系統(tǒng),它對文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件上傳、文件下載等,解決了大容量存儲(chǔ)和負(fù)載均衡的問題,本文介紹了SpringBoot整合FastDFS中間件實(shí)現(xiàn)文件分布管理,需要的朋友可以參考下2024-08-08