这是一个发牌洗牌的模拟动作,有两种洗牌动作,重复很多次可以明显感觉到两者时间差异[Java] 纯文本查看 复制代码 package first;
/**
* 扑克牌类
* 有以下属性
* 颜色 大小由大到小顺序:黑桃 红心 梅花 方块;
* 数字 大小由大到小顺序:2 A K Q J 10 9 8 7 6 5 4 3
* @author Administrator
* 大小编号 编号数字越小则越大
*/
public class Pai {
/**
* 颜色 大小由大到小顺序:黑桃 红心 梅花 方块
*/
private String colur;
/**
* 数字 大小由大到小顺序:2 A K Q J 10 9 8 7 6 5 4 3
*/
private String num;
/**
* 大小编号 编号数字越小则越大
*/
private int ID;
public String getColur() {
return colur;
}
public void setColur(String colur) {
this.colur = colur;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
}
package first;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
/**
* 创建牌,洗牌类
* @author Administrator
*
*/
public class BuildingAndChangePai {
public BuildingAndChangePai(){
this.newPai=new ArrayList<Pai>();
this.oldPai=new HashSet<Pai>();
this.randomPai=new ArrayList<Pai>();
}
public static void main(String[] args) {
BuildingAndChangePai it=new BuildingAndChangePai();
//it.builder();
//it.showNewPai();
//it.SetChangers();;
//it.showSetPai();
//it.randomPai();
//it.showRandom();
//以下时间与电脑配置有关
//以下循环需约1分20秒
//for(int i=0;i<10000000;i++){it=new BuildingAndChangePai();it.builder();it.randomPai();}
//以下循环需约30秒
for(int i=0;i<10000000;i++){it=new BuildingAndChangePai();it.builder();it.newRandom();}
it.showNewPai();
it.showRandom();
}
/**
* 一盒新牌
*/
private List<Pai> newPai;
/**
* 一盒random洗的牌
*/
private List<Pai> randomPai;
/**
* 一盒洗好的牌
*/
private Set<Pai> oldPai;
/**
* 创建一副牌的方法
*/
public void builder(){
//先创建两个List,按照顺序加入颜色和数字
List<String>colurs=new ArrayList<String>();
colurs.add("黑桃");
colurs.add("红心");
colurs.add("梅花");
colurs.add("方片");
List<String>nums=new ArrayList<String>();
nums.add("2");
nums.add("A");
nums.add("K");
nums.add("Q");
nums.add("J");
nums.add("10");
nums.add("9");
nums.add("8");
nums.add("7");
nums.add("6");
nums.add("5");
nums.add("4");
nums.add("3");
//创建int变量id;用于接下来统计大小顺序
int id=1;
//嵌套循环创建牌,外循环控制数字,内循环控制花色
for(int i=0;i<nums.size();i++){
for(int j=0;j<colurs.size();j++){
Pai pai=new Pai();
pai.setColur(colurs.get(j));
pai.setNum(nums.get(i));
pai.setID(id);
newPai.add(pai);
id++;
}
}
}
/**
* 新牌展示
*/
public void showNewPai(){
System.out.println("现有新牌如下:");
for(int i=0;i<(newPai.size());i++){
System.out.print(newPai.get(i).getID()+":"+newPai.get(i).getColur()+newPai.get(i).getNum()+" ");
if((i+1)%4==0)System.out.println();
}
}
/**
* 创建list-set的方法
*/
public void SetChangers(){
for(Pai pai:newPai){
oldPai.add(pai);
}
}
/**
* 洗好的牌展示
*/
public void showSetPai(){
System.out.println("现有list-set交换牌如下:");
int i=0;
for(Pai newPai:oldPai){
System.out.print(newPai.getID()+":"+newPai.getColur()+newPai.getNum()+" ");
i++;
if(i%4==0){System.out.println();}
}
}
/**
* random方法
*/
public void randomPai(){
Random random=new Random();
for(int i=0;i<52;i++){
int j;
Pai pai;
do{
j=random.nextInt(52);
pai=newPai.get(j);
}while(randomPai.contains(pai));
randomPai.add(pai);
}
}
/**
* 新的random方法
*/
public void newRandom(){
Random random=new Random();
for(int i=0;i<52;i++){
int j;
Pai pai;
j=random.nextInt(newPai.size());
pai=newPai.get(j);
randomPai.add(pai);
newPai.remove(j);
}
}
/**
* 展示randomPai
*/
public void showRandom(){
System.out.println("现有random牌如下:");
for(int i=0;i<(randomPai.size());i++){
System.out.print(randomPai.get(i).getID()+":"+randomPai.get(i).getColur()+randomPai.get(i).getNum()+" ");
if((i+1)%4==0)System.out.println();
}
}
} |