Java序谈之Map接口和斗地主游戏实例
来源:互联网 发布:网站域名加急备案 编辑:程序博客网 时间:2024/05/03 09:21
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、有一些特殊的方法
- keySet(),返回的是键值为元素的集合
- entrySet(),返回的是以键值对为元素的集合
- containsKey(),判断是否包含某个键值
- containsValue(),判断是否包含某个键值对应值
- 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的方式直接输出内部的hashMapfor(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 stubSystem.out.print(string+":");for (Integer integer : treeset) {System.out.print(hashmap.get(integer)+" ");}System.out.println();}
- Java序谈之Map接口和斗地主游戏实例
- 斗地主游戏发牌java程序
- java案例-实现斗地主游戏案例
- Java实现简单的斗地主游戏
- java基础7:map集合原理详解及斗地主游戏案例
- 斗地主游戏源码
- 斗地主游戏准备工作.
- 斗地主游戏算法
- 斗地主游戏
- java案例之-三国斗地主
- 斗地主系列之洗牌和发牌
- java——棋牌类游戏斗地主(webddz1.0)之二
- 棋牌游戏之 触摸滑动-选牌(和欢乐斗地主效果一样)
- java中用map实现斗地主基础版
- 斗地主之推测
- 棋牌游戏开发之斗地主算法点选牌
- 棋牌游戏开发之斗地主算法点选牌
- 棋牌游戏开发之斗地主算法点选牌
- Java之instanceof 关键字的深一步理解
- 【News】伊隆•马斯克终于承认特斯拉正在构建自己的定制AI芯片
- BZOJ 3510: 首都 LCT维护子树信息 启发式合并
- 论文浅尝 | Dynamic Weighted Majority for Incremental Learning
- ../表示相对当前路径的上一级目录
- Java序谈之Map接口和斗地主游戏实例
- CSDN-helloworld
- 数字翻转
- H5——webStorage
- AttributeError: 'module' object has no attribute 'merge_all_summaries'
- Erlang数据类型的内部实现
- 全排列
- 元旦计划之——chrome插件搞定校园网定时断连
- django-rest-framework过滤器的使用(三)