通过SetList,无重复元素和无序的特性,来洗牌,但每次生成的结果却基本一致,这是怎么回事呢?
package esoon.study.pokergame; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; public class pokerGame { List<pokerBox> pokerBox; List<pokerBox> pokerRandom; List<pokerPlayer> pokerPlayer; Set<pokerBox> pokerRandomSet; public pokerGame(){ pokerBox = new ArrayList<pokerBox>(); pokerPlayer = new ArrayList<pokerPlayer>(); pokerRandom = new ArrayList<pokerBox>(); pokerRandomSet = new HashSet<pokerBox>(); } /** *往pokerBox中添加黑桃、红桃、梅花、方片四种花色,以及对应的2——A数值 */ public void pokerBoxAdd(){ String[] colour = {"黑桃","红桃","梅花","方片"}; String[] number = {"2","3","4","5","6","7","8","9","10","J","Q","k","A"}; for(int i=0;i<colour.length;i++){ for(int j=0;j<number.length;j++){ pokerBox pb = new pokerBox(colour[i], number[j]); pokerBox.add(pb); } } System.out.println("创建扑克牌:"); for (pokerBox pokerbox : pokerBox) { System.out.print(pokerbox.colour+pokerbox.number+" "); } System.out.println(); } /** * 实现洗牌的功能 * 1、将pokerBox中的元素,通过Random随机生成List下标,并重新赋值到一个新的pokerBox中 */ public void pokerRandom(){ Random random = new Random(); List<Integer> r = new ArrayList<Integer>(); int r1; for(int i=0;i<pokerBox.size();i++){ do{ r1 = random.nextInt(pokerBox.size()); }while(r.contains(r1)); r.add(r1); pokerBox pokerbox = new pokerBox(pokerBox.get(r1).colour,pokerBox.get(r1).number); pokerRandom.add(pokerbox); } System.out.println("洗牌:"); for (pokerBox pokerbox : pokerRandom) { System.out.print(pokerbox.colour+pokerbox.number+" "); } System.out.println(); } public void pokerRandomSet(){ for(pokerBox pokerbox : pokerBox) { pokerRandomSet.add(pokerbox); } System.out.println("Set集合洗牌:"); for (pokerBox pokerbox : pokerRandomSet) { System.out.print(pokerbox.colour+pokerbox.number+" "); } System.out.println(); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub pokerGame pg = new pokerGame(); pg.pokerBoxAdd(); pg.pokerRandom(); pg.pokerRandomSet(); } }
在纸牌游戏中,多次对比pokerRandom()方法和pokerRandomSet()方法洗牌后的结果,发现pokerRandom()方法排序基本是每次都不一样。而通过SetList的pokerRandomSet()方法排序结果却基本一样。这是什么回事呢?