import java.util.*;
class Demo
{
public static void main(String[] args)
{
//定义两个数组一个存储扑克牌的花色,一个存储扑克牌的点数
String[] color = {"黑桃","红桃","梅花","方块"};
String[] number = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
StackList list = new StackList();
//利用双重for循环,按花色和点数从小到大添加到list集合中
for (int i = 0;i < 4 ;i++ )
{
for (int j = 0;j < 13 ;j++ )
{
list.add(new Poker(color[i],number[j]));
}
}
//输出按顺序添加好扑克牌的集合
System.out.println(list.list);
//创建一个随机数对象
Random random = new Random();
int a = 0;
//创建一个新的集合用来存储洗好的扑克牌
StackList newList = new StackList();
//循环添加扑克牌,一共52张
while (a < 52)
{
//随机产生一张扑克牌
Object poker = list.get(random.nextInt(52));
//判断新的集合中是否存在随机产生的扑克牌,如果存在则不添加到新的集合中
if (!newList.contains(poker))
{
newList.add(poker);
}
a = newList.size();
}
//输出洗完牌后的集合
System.out.println("\n\n洗完牌后:" + newList.list);
}
}
class Poker
{
//重写toString方法,如果不重写则返回的是哈希值
public String toString(){
return color + number;
}
//重写equals方法,比较花色和点数是否都是一样的,都一样则返回true否则返回false
public boolean equals(Object obj){
Poker n = (Poker)obj;
return this.color.equals(n.color) && this.number.equals(n.number);
}
}
class StackList
{
LinkedList list;
//Stack List的构造方法
public StackList(){
list = new LinkedList();
}
//StackList的add方法
public void add(Object m){
list.offer(m);
}
//StackList的poll方法
public Object poll(){
return list.poll();
}
//StackList的size方法
public int size(){
return list.size();
}
//Stack List的get方法
public Object get(int index)
{
return list.get(index);
}
//StackList的comtains方法
public boolean contains(Object o){
return list.contains(o);
}
}