HashMap是一种集合,是Map的一种具体实现类。对外表现为采用键值(key-value)对的方式存储数据。
TreeSet特点是什么?
TreeSet是用于对元素进行排序的有序集合类,不允许有重复的元素
TreeSet也是不保证元素的顺序与插入的顺序一致,TreeSet是会对元素进行排序
TreeSet数据结构:二叉树
特点:元素是有大小顺序的
ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。
接下来用三个工具实现斗地主洗牌和发牌并对牌进行排序的代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
/**
* 模拟斗地主洗牌和发牌,牌没有排序
*
*/
public class PokerTest {
public static void main(String[] args) {
//1.组成一副扑克牌
String[] num={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] color={"方片♦","梅花♣","红桃♥","黑桃♠"};
HashMap poker = new HashMap();
ArrayList list = new ArrayList();
int index=0;
for(String s1:num){
for(String s2:color){
poker.put(index,s2.concat(s1)); //将索引和扑克牌添加到Hashmap中 concat连接两个数组
list.add(index); //将索引放入ArrayList集合中
index++;
}
}
//添加大小王
poker.put(index,"小王");
list.add(index);
index++;
poker.put(index,"大王");
list.add(index);
//2.洗牌 shuffle()
Collections.shuffle(list);
//3.发牌
//3.1创建3个角色和一个底牌对应的四个ArrayList
TreeSet tom=new TreeSet();
TreeSet jerry=new TreeSet();
TreeSet me=new TreeSet();
TreeSet lastCards=new TreeSet();
for(int i=0;i<list.size();i++){
if(i> list.size()-3){
lastCards.add(list.get(i));
}
if(i%3==0){
tom.add(list.get(i));
}else if(i%3==1){
jerry.add(list.get(i));
}else if(i%3==2){
me.add(list.get(i));
}
}
//3.2 遍历显示四个ArrayList
lookPoker("Tom",tom,poker);
lookPoker("Jerry",jerry,poker);
lookPoker("豆粉",me,poker);
lookPoker("底牌",lastCards,poker);
}
public static void lookPoker(String name, TreeSet ts, HashMap map){
System.out.println(name+"的牌是:");
for(Object index:ts){
System.out.println(map.get(index));
}
}
}
Tom的牌是:
红桃♥3
方片♦4
红桃♥4
梅花♣5
方片♦6
方片♦7
红桃♥7
方片♦8
方片♦9
梅花♣9
梅花♣10
梅花♣J
红桃♥J
方片♦Q
黑桃♠Q
方片♦K
梅花♣K
大王
Jerry的牌是:
梅花♣A
红桃♥A
黑桃♠A
方片♦2
梅花♣2
红桃♥2
方片♦3
梅花♣4
方片♦5
梅花♣6
红桃♥6
黑桃♠6
梅花♣7
黑桃♠7
梅花♣8
红桃♥8
方片♦J
梅花♣Q
豆粉的牌是:
方片♦A
黑桃♠2
梅花♣3
黑桃♠3
黑桃♠4
红桃♥5
黑桃♠5
黑桃♠8
红桃♥9
黑桃♠9
方片♦10
红桃♥10
黑桃♠10
黑桃♠J
红桃♥Q
红桃♥K
黑桃♠K
小王
底牌的牌是:
黑桃♠5
红桃♥8
可见TreeSet自动为牌的位置排序