04 Map(HashMap)、map集合的遍历,

一、Map接口中的添加方法

使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;

若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。

二、Map集合的遍历

public static void main(String[] args) {

        Map<String, String> map = new HashMap<>();

        map.put("李晨", "范冰冰");

        map.put("冷锋", "龙小云");

        map.put("张三", "张三妻");

        //第一种方式

        //通过keySet()方法,把key放到一个set集合中

        Set<String> set = map.keySet();

        //遍历set集合,通过key找到value

        for (String key : set) {

            System.out.println(key + " = " + map.get(key));

        }

   System.out.println("=====================");

        //第二种方式

        //1.获取map的entry对象的set集合

        Set<Map.Entry<String, String>> entrySet = map.entrySet();

        //2,遍历集合,获取每一个对象(key,value)

        for (Map.Entry<String, String> entry : entrySet) {

            //3,取出每个对象中的key,value

            String key = entry.getKey();

            String value = entry.getValue();

            System.out.println(key + " = " + value);

        }

三、HashMap(键和值都可以存储null,但HashTable键值都不能为null

存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

四、HashMap存储自定义类型键值

HashMap的底层用哈希表

保证键的唯一性,那么键对应的类型必须重写hashCode方法和equals方法;

四、LinkedHashMap

HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链

表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

五、斗地主基本练习

package cn.itcast.doudizhu;



import java.util.ArrayList;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;



public class WTGDouDiZhu {

    public static void main(String[] args) {

        //1.准备牌

        //定义两个集合,存储花色和牌的序号

        List<String> colors = List.of("♠", "♥", "♣", "♦");

        List<String> numbers = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");

        //定义集合存储索引

        ArrayList<Integer> listIndex = new ArrayList<>();

        //定义HashMap集合存储拼凑的牌和索引

        HashMap<Integer, String> map = new HashMap<>();

        //存入大王和小王

        Integer index = 0;

        map.put(index, "大王");

        listIndex.add(index);

        index++;

        map.put(index, "小王");

        listIndex.add(index);

        index++;

        //遍历拼凑牌

        for (String number : numbers) {

            for (String color : colors) {

                map.put(index, color + number);

                listIndex.add(index);

                index++;

            }

        }

// System.out.println(map);

        //2.洗牌

        Collections.shuffle(listIndex);

// System.out.println(listIndex);

        //3.发牌

        ArrayList<Integer> list1 = new ArrayList<>();

        ArrayList<Integer> list2 = new ArrayList<>();

        ArrayList<Integer> list3 = new ArrayList<>();

        ArrayList<Integer> diPai = new ArrayList<>();

        for (int i = 0; i < listIndex.size(); i++) {

            if (i >= 51) {

                diPai.add(listIndex.get(i));

            } else if (i % 3 == 1) {

                list1.add(listIndex.get(i));

            } else if (i % 3 == 2) {

                list2.add(listIndex.get(i));

            } else if (i % 3 == 0) {

                list3.add(listIndex.get(i));

            }

        }





        //4.看牌

        Collections.sort(list1);

        Collections.sort(list2);

        Collections.sort(list3);

        Collections.sort(diPai);



        lookPai("张三", list1, map);

        lookPai("李四", list2, map);

        lookPai("王五", list3, map);

        lookPai("底牌", diPai, map);





    }



    private static void lookPai(String name, ArrayList<Integer> list, HashMap<Integer, String> map) {

        System.out.print(name+": ");

        for (int i = 0; i < list.size(); i++) {

            String s = map.get(list.get(i));

            if (i == list.size() - 1) {

                System.out.println(s);

            } else {

                System.out.print(s + ",");

            }

        }

    }

}

猜你喜欢

转载自blog.csdn.net/woshilovetg/article/details/81672459