JAVA中的HashMap应用

这篇博客探讨了Java中的HashMap,详细解析了其内部机制,包括哈希值计算、Hash表、Hash算法的应用,以及MD5在HashMap中的可能角色。HashMap通过数组结合链表和红黑树实现,确保无重复数据存储。内容还提及了类似洗牌和发牌的过程,用于类比HashMap处理数据的方式。
摘要由CSDN通过智能技术生成

package cn.itcast.chapter06.task03;
/*

  • HashMap 哈希值 Hash表 Hash算法 MD5
  • (数组+链表+红黑树)
  • 没有重复数据(hash)
  • 洗牌 发牌 3人 54牌 3张底 17

*/

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class PokerShuffleCards  {
   public static void main(String[] args) {
   	// 准备花色
   	ArrayList<String> color = new ArrayList<String>();
   	color.add("♠"); //♠1  ♠J
   	color.add("♥");
   	color.add("♦");
   	color.add("♣");
   	// 准备数字 ,用ArrayList将纸牌由小到大排序
   	ArrayList<String> number = new ArrayList<String>();
   	for (int i = 3; i <= 10; i++) {
   		number.add(i + "");
   	}
   	number.add("J");
   	number.add("Q");
   	number.add("K");
   	number.add("A");
   	number.add("2");
   	// 定义一个map集合:用来将数字与每一张牌进行对应
   	HashMap<Integer, String> map = new HashMap<Integer, String>();
   	int index = 0;// 纸牌编号0--♠3   1--♠4   关系不变
   	for (String thisNumber : number) {// 循环纸牌数字
   		for (String thisColor : color) {// 循环纸牌花色
   			// 将花色与数字组合,形成52张牌,并赋予其编号
   			map.put(index++, thisColor + thisNumber);
   		}
   	}
   	// 加入大小王
   	map.put(index++, "小☺");
   	map.put(index++, "大☻");
   	// 一副54张的牌 ArrayList里边为0-53的数的新牌
   	ArrayList<Integer> cards = new ArrayList<Integer>();
   	for (int i = 0; i <= 53; i++) {
   		cards.add(i);// 此时的cards顺序为0-53
   	}
   	// 洗牌,使用Collections工具类中的shuffle()方法
   	Collections.shuffle(cards);// 此时的cards顺序已被打乱
   	// 创建三个玩家和底牌
   	ArrayList<Integer> iPlayer = new ArrayList<Integer>();
   	ArrayList<Integer> iPlayer2 = new ArrayList<Integer>();
   	ArrayList<Integer> iPlayer3 = new ArrayList<Integer>();
   	ArrayList<Integer> iSecretCards = new ArrayList<Integer>();
   	// 遍历这副洗好的牌,遍历过程中,将牌发到三个玩家和底牌中
   	for (int i = 0; i < cards.size(); i++) {
   		if (i < 51) {
   			if (i % 3 == 0) {
   				iPlayer.add(cards.get(i));// 与3取余为0的牌发给玩家1
   			} else if (i % 3 == 1) {
   				iPlayer2.add(cards.get(i));// 与3取余为1的牌发给玩家2
   			} else {
   				iPlayer3.add(cards.get(i));// 其余的牌发给玩家3
   			}
   		} else {
   			iSecretCards.add(cards.get(i));// 留取3张底牌				
   		}
   	}
   	// 对每个人手中的牌排序,使用Collections工具类中的sort()方法
   	Collections.sort(iPlayer);
   	Collections.sort(iPlayer2);
   	Collections.sort(iPlayer3);
   	// 对应数字形式的每个人手中的牌,定义字符串形式的牌
   	ArrayList<String> sPlayer = new ArrayList<String>();
   	ArrayList<String> sPlayer2 = new ArrayList<String>();
   	ArrayList<String> sPlayer3 = new ArrayList<String>();
   	ArrayList<String> sSecretCards = new ArrayList<String>();
   	// 循环主键,从map中获取纸牌
   	for (Integer key : iPlayer) {
   		sPlayer.add(map.get(key));
   	}
   	for (Integer key : iPlayer2) {
   		sPlayer2.add(map.get(key));
   	}
   	for (Integer key : iPlayer3) {
   		sPlayer3.add(map.get(key));
   	}
   	for (Integer key : iSecretCards) {
   		sSecretCards.add(map.get(key));
   	}
   		// 看牌
   		System.out.println("玩家1:" + sPlayer);
   		System.out.println("玩家2:" + sPlayer2);
   		System.out.println("玩家3:" + sPlayer3);
   		System.out.println("底牌:" + sSecretCards);
   	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值