java.util.HashMap<K, V>:底层是数组+链表实现。如果用自定义对象作为key,要保证key唯一,则必须重写hashCode()和equals()方法。不能保证key的存取顺序一致。键可以为null。

1、示例

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
public class Test46 {
    public static void main(String[] args) {
        // 创建map集合
        HashMap<Student, String> map = new HashMap<>();

        // 添加元素
        map.put(new Student("张三", 18), "北京");
        map.put(new Student("李四", 17), "上海");
        map.put(new Student("王五", 32), "广州");
        map.put(new Student("张三", 18), "深圳");

        // 遍历map集合,键找值
        Set<Student> keys = map.keySet();
        for (Student key : keys) {
            String value = map.get(key);
            System.out.println(key + " --- " + value);
        }
    }
}

2、案例

按照斗地主的规则,完成洗牌发牌的动作。

  • 具体规则:

    1. 组装54张扑克牌将
    2. 54张牌顺序打乱
    3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌
    4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
  • 需求分析:

    1. 准备牌:
      完成数字与纸牌的映射关系: 使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
    2. 洗牌:
      通过数字完成洗牌发牌
    3. 发牌:
      将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 存放的过程中要求数字大小与斗地主规则的大小对应。 将代表不同纸牌的数字分配给不同的玩家与底牌。
    4. 看牌:
      通过Map集合找到对应字符展示。 通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。
public class Test2 {
    public static void main(String[] args) {
        // 1.准备牌
        // 1.1 创建map集合,存储牌面
        HashMap<Integer, String> pokerMap = new HashMap<>();
        // 1.2 创建花色集合和数字集合
        ArrayList<String> colors = new ArrayList<>();
        ArrayList<String> numbers = new ArrayList<>();
        // 1.3 存储花色和数字
        Collections.addAll(colors, "♦", "♣", "♥", "♠");
        Collections.addAll(numbers, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
        // 1.4 创建牌,存储到map集合中
        int count = 1;
最后修改:2021 年 10 月 06 日
如果觉得我的文章对你有用,请随意赞赏