1.Map接口概述:
将映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值
Map接口和Collection接口的不同:
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
2.Map集合的一些常用功能
(1)添加功能
V put(K key,V value):添加元素;这个其实还有另一个功能,替换
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
(2)删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
(3)判断功能
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
(4)获取功能
Set<Map.Entry<K,V>> entrySet(): 返回一个键值对的Set集合
V get(Object key):根据键获取值
Set keySet():获取集合中所有键的集合
Collection values():获取集合中所有值的集合
(5)长度功能
int size():返回集合中的键值对的对数
3.Map集合的遍历
HashMap<Integer, String> hashMap = new HashMap<>();
hashMap.put(001,"aaa");
hashMap.put(002,"bbb");
hashMap.put(003,"ccc");
hashMap.put(004,"ddd");
//map集合遍历方式1:keyset():根据键找值;
Set<Integer> integers = hashMap.keySet();
for (Integer key : integers) {
System.out.println(key+"==="+hashMap.get(key));
}
//方式二:entryset() 获取键值对对象;
Set<Map.Entry<Integer, String>> entries = hashMap.entrySet();
for (Map.Entry<Integer, String> entry : entries) {
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"==="+value);
}
4.模拟斗地主洗牌和发牌的案例
public static void main(String[] args) {
//A:
//案例演示:
//模拟斗地主洗牌和发牌,牌没有排序
//得有一副牌
//生成54张牌放到牌盒里面
String[] colors = {"♠", "♥", "♦", "♣"};
String[] nums = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
HashMap<Integer, String> hm = new HashMap<>();
ArrayList<Integer> list = new ArrayList<>();//存索引
int index=0;
for (String num : nums) {
for (String color : colors) {
hm.put(index,color.concat(num));
list.add(index);
index++;
}
}
//手动添加大小王
hm.put(index,"★");
list.add(index);
index++;
hm.put(index,"☆");
list.add(index);
//洗牌
Collections.shuffle(list);
Collections.shuffle(list);
Collections.shuffle(list);
//发牌
TreeSet<Integer> 高进 = new TreeSet<>();
TreeSet<Integer> 刀仔 = new TreeSet<>();
TreeSet<Integer> 星仔 = new TreeSet<>();
TreeSet<Integer> 底牌 = new TreeSet<>();
// 高进 0 3 6 9
//刀仔 1 4 7 10
// 星仔 2 5 8 11
for (int i = 0; i < list.size(); i++) {
if (i >= list.size() - 3) {
底牌.add(list.get(i));
} else if (i % 3 == 0) {
高进.add(list.get(i));
} else if (i % 3 == 1) {
刀仔.add(list.get(i));
} else {
星仔.add(list.get(i));
}
}
//看牌
lookPoker(hm,高进,"高进");
lookPoker(hm,刀仔,"刀仔");
lookPoker(hm,星仔,"星仔");
lookPoker(hm,底牌,"底牌");
}
private static void lookPoker(HashMap<Integer, String> hm, TreeSet<Integer> ts, String name) {
System.out.println(name);
for (Integer i : ts) { //
System.out.print(hm.get(i)+" ");
}
System.out.println();
}