Java.util.Collections类下有一个静态的shuffle()方法,如下:
1)static void shuffle(List<?> list) 使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的。
2)static void shuffle(List<?> list, Random rand) 使用指定的随机源对指定列表进行置换,所有置换发生的可能性都是大致相等的,假定随机源是公平的。
通俗一点的说,就像洗牌一样,随机打乱原来的顺序。
注意:如果给定一个整型数组,用Arrays.asList()方法将其转化为一个集合类,有两种途径:
1)用List<Integer> list=ArrayList(Arrays.asList(ia)),用shuffle()打乱不会改变底层数组的顺序。
2)用List<Integer> list=Arrays.aslist(ia),然后用shuffle()打乱会改变底层数组的顺序。代码例子如下:
package com.item.test;
import java.util.*;
public class T1 {
public static void main(String[] args){
Random rand=new Random(54);
Integer[] ia={0,1,2,3,4,5,6,7,8,9};
List<Integer> list=new ArrayList<Integer>(Arrays.asList(ia));
System.out.println("前 shufflig: "+list);
Collections.shuffle(list,rand);
System.out.println("后 shuffling: "+list);
System.out.println("数组: "+Arrays.toString(ia));
List<Integer> list1=Arrays.asList(ia);
System.out.println("前 shuffling: "+list1);
Collections.shuffle(list1,rand);
System.out.println("后 shuffling: "+list1);
System.out.println("数组: "+Arrays.toString(ia));
}
}
效果:
所以接上一篇文章:【Java扑克牌(enum)】
package com.item.test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Action {
public static void main(String[] args) {
//随机卡牌
List<Card> list=ResetCard(StartCard());
int i=0;
for (Card c:list) {
if(i%3==0){
System.out.println();
}
System.out.print(c.getIndex()+":"+c.getName()+"\t");
i++;
}
}
/**
* 随机排序
* @param list
* @return
*/
public static List<Card> ResetCard(List<Card> list){
Collections.shuffle(list);
return list;
}
/**
* 初始化卡牌
* @return
*/
public static List<Card> StartCard(){
List<Card> list=new ArrayList<>(54);
int i=0;
for (CardsEnum cardsEnum:CardsEnum.values()) {
for (CardColorEnum cardColorEnum:CardColorEnum.values()) {
list.add(new Card(cardsEnum,cardColorEnum,i++));
}
}
Card big=new Card();
big.setName(CardBossEnum.BIG.getName());
big.setIndex(i++);
Card small=new Card();
small.setName(CardBossEnum.SMALL.getName());
small.setIndex(i++);
list.add(big);
list.add(small);
return list;
}
}
效果如下: