Loading... > java.util.HashMap<K, V>:底层是数组+链表实现。如果用自定义对象作为key,要保证key唯一,则必须重写hashCode()和equals()方法。不能保证key的存取顺序一致。键可以为null。 # 1、示例 ```java has-numbering 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); } } ``` ```java has-numbering 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. 查看三人各自手中的牌(按照牌的大小排序)、底牌 * 需求分析: a. 准备牌: 完成数字与纸牌的映射关系: 使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。 b. 洗牌: 通过数字完成洗牌发牌 c. 发牌: 将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 存放的过程中要求数字大小与斗地主规则的大小对应。 将代表不同纸牌的数字分配给不同的玩家与底牌。 d. 看牌: 通过Map集合找到对应字符展示。 通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。 ```java has-numbering 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; pokerMap.put(count++, "大王 最后修改:2021 年 10 月 06 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏