Map

Map集合特点

       Collection当中存储的是:一个一个的元素

       Map<K, V>当中存储的是:一对儿一对儿的元素。

       第一个泛型代表:键是什么类型

       第二个泛型代表:值是什么类型



Map集合添加方法保存数据

       map.put(key, value):添加一个键值对儿进去,返回被替换的本来value值。

“键找值”的方式遍历Map集合

  1. keySet()拿到所有的键
  2. get(Object key)根据键去找值

Set<K> keys = map.keySet();
for (K key : keys) {
System.out.println(map.get(key));
}

System.out.println(map.get(key));

 “键值对”的方式遍历Map集合

  1. entrySet()拿到所有的键值对
  2. getKey()拿到键
  3. getValue()拿到值

 Set<Map.Entry<K,V>> entries = map.entrySet();
	for (Map.Entry<K,V> entry : entries) {
		K key = entry.getKey();
		V value = entry.getValue();
		// ...
	}

HashMap存储自定义键值对的数据

  1. 自定义的类如果作为value,没有要求。
  2. 自定义的类如果作为key,要求必须同时覆盖重写equals和hashCode方法。

HashMap编写斗地主洗牌发牌

       强调:List<Integer> allCards当中存放的是数字,洗牌洗的是,发牌发的是数字,排序也是排的数字,只有看牌的时候,才会将数字翻译成为字符串。

       Map<Integer, String> map = … 负责将数字翻译成为对应的字符串。

package fun.chenqi.card;

import java.util.*;

public class PokerSortGame {

    public static void main(String[] args) {
        String[] colors = {"黑桃", "红桃", "方片", "梅花"}; // 花色不决定大小
        // 点数从小到大
        String[] points = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

        // 第一趟循环:黑桃3、红桃3、方片3、梅花3
        // 第二趟循环:黑桃4、红桃4、方片4、梅花4
        Map<Integer, String> map = new HashMap<>(); // 存储的是数字和字符串的对照关系。
        List<Integer> allCards = new ArrayList<>(); // 这里存储的是数字

        int count = 0;
        for (String point : points) { // 点数
            for (String color : colors) { // 花色
                String card = color + point; // 这是牌面字符串
                map.put(count, card); // 0, 黑桃3
                allCards.add(count); // 0
                count++;
            }
        }
        map.put(52, "小王");
        map.put(53, "大王");
        allCards.add(52);
        allCards.add(53);

        // 洗牌
        Collections.shuffle(allCards);

        // 发牌
        List<Integer> player1 = new ArrayList<>();
        List<Integer> player2 = new ArrayList<>();
        List<Integer> player3 = new ArrayList<>();
        List<Integer> bottom = new ArrayList<>();

        for (int i = 0; i < allCards.size(); i++) {
            if (i < 3) {
                bottom.add(allCards.get(i));
            } else if (i % 3 == 0) {
                player1.add(allCards.get(i));
            } else if (i % 3 == 1) {
                player2.add(allCards.get(i));
            } else {
                player3.add(allCards.get(i));
            }
        }

        // 排序
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(bottom);

        showCards(player1, map);
        showCards(player2, map);
        showCards(player3, map);
        showCards(bottom, map);
    }

    private static void showCards(List<Integer> cards, Map<Integer, String> map) {
        for (Integer num : cards) {
            // 数字 --> String
            String card = map.get(num);
            System.out.print(card + " ");
        }
        System.out.println();
    }

}

发表评论