Java中 Collections.shuffle()
顾名思义,shuffle是洗牌的意思,所以这个方法的作用是将list中的循序打乱,参数放入List
一个简单的例子:
@Test
private void test1(){
ArrayList<String> num=new ArrayList<String>();
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<String> num=new ArrayList<String>();
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<String> color=new ArrayList<String>();
color.add("黑桃");color.add("红桃");color.add("方片");color.add("草花");
//所有牌
ArrayList<String> card=new ArrayList<String>();
for (int i=0;i<color.size();i++){
for (int j=0;j<num.size();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<numperp*i;j++){
System.out.print(Card().get(j)+"、");
}
System.out.println();
}
}
结果如下