Java中 Collections.shuffle()
顾名思义,shuffle是洗牌的意思,所以这个方法的作用是将list中的循序打乱,参数放入List
函数源代码
一个简单的例子:
@Test
private void test1(){
ArrayList num=new ArrayList();
num.add("A");num.add("2");num.add("3");num.add("4");num.add("5");num.add("6");num.add("7");num.add("8");num.add("9");num.add("10");
num.add("J");num.add("Q");num.add("K");
System.out.println(num);
Collections.shuffle(num);
System.out.println(num);
}
Arraylist是list一个实现类,所以也可以用shuffle
打印前后对比
结果
上面一行是arraylist中依次放入的顺序,下面是洗牌后的顺序
这样可以做一个常用的面试题了:发扑克牌
玩过扑克的都知道,玩扑克的一些顺序,首先要有牌,然后洗牌,然后打乱了后发到所有人手里,每个人牌数一样,这些都是需要注意的特点。
首先要创造出52张牌(去掉了大小王),这里通过利用两个list(点数和花式)循环创建一个所有牌的list,然后shuffle一下,最后return card,拿到的牌就是打乱的了。
//创建牌
private ArrayList Card(){
//点数
ArrayList num=new ArrayList();
num.add("A");num.add("2");num.add("3");num.add("4");num.add("5");num.add("6");num.add("7");num.add("8");num.add("9");num.add("10");
num.add("J");num.add("Q");num.add("K");
//花式
ArrayList color=new ArrayList();
color.add("黑桃");color.add("红桃");color.add("方片");color.add("草花");
//所有牌
ArrayList card=new ArrayList();
for (int i=0;i
for (int j=0;j
{
card.add(color.get(i)+num.get(j));
}
}
//洗牌
Collections.shuffle(card);
return card;
}
然后是发牌方法,定义了发牌人数(写死为4个人),每个人能发到的牌数(循环用)
通过双循环打印出来效果
j的循环是通过i值的变换而变换,当i是1,j就从0循环到12,然后i=2,j=13-25....
@Test
//发牌
private void Deal(){
//人数
int pnum=4;
//每人能发到的牌数
int numperp=52/pnum;
for (int i=1;i<=pnum;i++){
System.out.println("第"+i+"人拿到的:");
//根据i来控制j的初始值
for (int j=(numperp)*(i-1);j
System.out.print(Card().get(j)+"、");
}
System.out.println();
}
}
结果如下
结果