Java小游戏之斗地主游戏实例Map集合

Map的特点是什么?

1、Map对象是一个双列的容器

2、两列分别对应key和value,二者一一对应,是映射关系

3、Map中的数据以键值对的形式保存

4、键值是唯一的,不能重复的

HashSet()和HashMap()之间的关系?

HashSet()底层是HashMap(),HashSet()是依赖HashMap()的

HashSet()为什么要在底层实现HashMap()?

因为二者都是用相同的哈希算法,只需要写一个,体现了面向对象的封装思想

Map中的去重和排序操作都是针对谁的?

HashMap()去重和TreeMap()排序操作都是针对键值的

HashMap和HashTable()之间有什么区别?

1、HashMap是对HashTable的优化

2、HashMap是线程不安全的,HashTable是线程安全的

3、HashMap是JDK1.2出现的,HashTable是JDK1.0出现的

4、HashMap中的key和value是可以为null的,但是HashTable中不可以出现null

Map中的方法要注意什么?

1、首先Map接口的添加方法是put()

2、put()方法的返回值是被覆盖的那个值

3、remove方法的返回值是被删除的那个值

4、有一些特殊的方法

  1. keySet(),返回的是键值为元素的集合
  2. entrySet(),返回的是以键值对为元素的集合
  3. containsKey(),判断是否包含某个键值
  4. containsValue(),判断是否包含某个键值对应值
  5. get(key),获取键值对应值

Map中遍历的三种方法

1、利用keysSet()方法,获取集合,然后使用foreach遍历

2、利用keySet()方法获取集合,然后使用迭代器遍历

3、利用entrySet(),获取键值对的集合,然后使用foreach遍历,其中使用getKey()和getValue()方法

1、使用foreach代码示例

	public static void fun2() {
		Map<String, Integer> map = new HashMap<>();
		map.put("wangning", 18);
		map.put("ning", 18);
		map.put("wang", 18);
		map.put("wn", 18);
		Set<String> hashSet  =  map.keySet();
		for (String string : hashSet) {
			System.out.println(string+":"+map.get(string));
		}
	}

2.、使用迭代器遍历代码示例

	public static void fun1() {
		Map<String, Integer> map = new HashMap<>();
		map.put("wangning", 18);
		map.put("ning", 18);
		map.put("wang", 18);
		map.put("wn", 18);
		Set<String> hashSet  =  map.keySet();
		Iterator<String> iterator = hashSet.iterator();
		//为了拿到所有的key去遍历Set集合
		while (iterator.hasNext()) {
			String a1 = iterator.next();
			//通过找出的key,得到每一个键对应值
			System.out.println(map.get(a1));
		}
	}
3、使用entrySet方法代码示例
	public static void fun4() {
		Map<String, Integer> map = new HashMap<>();
		map.put("wangning", 18);
		map.put("ning", 18);
		map.put("wang", 18);
		map.put("wn", 18);
		//获取所有的entry对象的set集合
		Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
		for (Entry<String, Integer> entry : entrySet) {
			System.out.println(entry.getKey()+"="+entry.getValue());
		}
	}

Map接口之间的嵌套

分析:最后使用了entrySet()的方法,直接使用getValue()的方法输出

代码示例:

		//初始化两个容器,保存学生信息
		HashMap<String, Integer> hashMap2 = new HashMap<>();
		hashMap2.put("wangning",18);
		hashMap2.put("wang",19);
		HashMap<String, Integer> hashMap3 = new HashMap<>();
		hashMap3.put("wn", 20);
		hashMap3.put("ning",21);
		//第三个容器保存前面两个容器的信息
		HashMap<String,HashMap<String,Integer>> hashMap = new HashMap();
		hashMap.put("一班", hashMap2);
		hashMap.put("二班",hashMap3);
		//使用EntrySet的方式getvalue的方式直接输出内部的hashMap
		for(Entry<String, HashMap<String, Integer>> entry : hashMap.entrySet()) {
			System.out.println(entry.getKey()+entry.getValue());
		}
	}

斗地主的发牌游戏的实例

分析:

1、需要有一个map类型容器,key值存放Integer,value存放扑克牌,已经两个字符串数组

2、给map容器中传入所有的扑克牌,并且将key值在循环中一次传给一个数组

3、将存放key值得数组打乱顺序,之后分别定义四个treeSet,前三个用于存放玩家的扑克牌,最后一个存放底牌

4、最后按照顺序将扑克牌打印出来

思考:之所用treeSet集合来接收key值,是因为key值对应扑克牌,并且扑克牌是按照递增的顺序传入map的,使用treeset集合将key排序后,就会得到按照顺序排列的扑克牌,即便扑克牌卡头数字相同,但是key值不同,所以还是会紧靠着被输出

代码示例:

public class Demo04斗地主实例 {
	public static void main(String[] args) {  
        HashMap<Integer, String> hashmap = new HashMap<Integer,String>();  
        ArrayList<Integer> indexs = new ArrayList<Integer>();  
        //创建两个字符串数组,用于形成牌
        String[] colors={"梅花","红桃","黑桃","方块"};  
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2",};  
        int index = 0;  
        //给Map中放牌
        for (int i = 0; i < numbers.length; i++) {
			for (int j = 0; j < colors.length; j++) {
				hashmap.put(index, (colors[j]+numbers[i]));
				indexs.add(index);	
				index++;
			}
		}
        indexs.add(index);  
        hashmap.put(index, "小王");  
        index++;  
        indexs.add(index);  
        hashmap.put(index, "大王");  
        Collections.shuffle(indexs);  
        TreeSet<Integer> treeset1 = new TreeSet<Integer>();  
        TreeSet<Integer> treeset2 = new TreeSet<Integer>();  
        TreeSet<Integer> treeset3 = new TreeSet<Integer>();  
        TreeSet<Integer> dipai = new TreeSet<Integer>();  
        for (int i = 0; i < indexs.size(); i++) {
        		if (i>=indexs.size()-3) {
				dipai.add(indexs.get(i))	;
			}else if(i%3==0){  
                treeset1.add(indexs.get(i));  
            }else   if(i%3==1){  
                treeset2.add(indexs.get(i));  
            }else   if(i%3==2){  
                treeset3.add(indexs.get(i));  
            }  
        }    
        System.out.println("游戏开始!");  
        kanpai("玩家1",treeset1,hashmap);  
        kanpai("玩家2",treeset2,hashmap);  
        kanpai("玩家3",treeset3,hashmap);  
        kanpai("底牌",dipai,hashmap);  
    }
	private static void kanpai(String string, TreeSet<Integer> treeset, HashMap<Integer, String> hashmap) {
		// TODO Auto-generated method stub
		System.out.print(string+":");
		for (Integer integer : treeset) {
			System.out.print(hashmap.get(integer)+" ");
		}
		System.out.println();
	} 
	








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值