一、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 + ",");
}
}
}
}