最近需要做一個隨機出廣告的功能,上篇部落格中說到了oracle 端的隨機辦法。
在這對Java List中怎麼隨機取數做一個分享:
其實List中沒有現成隨機取記錄的方法,但在Collections中有個shuffle方法可以實現“洗牌”的效果,所謂“洗牌”就是把List中的元素打亂重新排序。重新排列後的List再從頭取需要發記錄數,就相等於完成了隨機取數的效果,見代碼
import java.util.ArrayList;<br />import java.util.Collections;<br />import java.util.List;<br />public class TTL {<br />public static void main(String[] str) {<br />List<Integer> list = new ArrayList<Integer>();<br />for (int i = 0; i < 5; i++) {<br />list.add(i);<br />}<br />System.out.println("orginal List:");<br />for (Integer s : list) {<br />System.out.print(s);<br />}<br />System.out.println();</p><p>Collections.shuffle(list);<br />System.out.println("after shuffle List:");<br />for (Integer s : list) {<br />System.out.print(s);<br />}<br />}<br />}<br />
輸出結果:
orginal List:
01234
after shuffle List:
32041
shuffle的原理就是用了Collection中的swap,對List中的每一個元素實現隨機換位一次,這也就意味著這種隨機方式不適合對List內中很多記錄的隨機。