作用:存储一组数据类型相同的数
特点:
存储的方式是以键值对的形式存储格式为:
键:key
值:value
Map
HashMap
K的数据结构:红黑树(二叉树)+哈希表
特点:
线程不安全的
JDK1.2
允许null作为键或值
HashTable
K的数据结构:红黑树(二叉树)+哈希表
特点:
线程安全的
JDK1.0
不允许null作为键或值
TreeMap
K的数据结构:红黑树(二叉树)+自定义比较
注意:
key对应的数据类型要么拥有比较性,要么在创建TreeMap时指定比较器
Properties
注意:后期在配置文件读写中使用,其本质就是一个Map,所以拿到该对象后,Map对象如何操作他就如何操作
注意:
key不能重复
如果Map中已经存在该key,那么本次存储的值将会替换原有的值
Map不能自己创建对象,须由它的子类 HashTable TreeTable HashMap来创建
Map中的方法(所有子类公用,子类无特殊方法):
增:
V put(K k,V v):添加一个键值对
注意:
如果本次添加的键值对中键不在当前map中存在,返回值为null
如果本次添加的键值对中键在当前map中存在,返回值为key原来对应的Value
如果本次添加的键值对中键在当前map中存在,会替换原有的值
void putAll(Map<? extends K, ? extends V> m):添加多个键值对
删:
V remove(Object key):根据key删除对应的键值对象
注意:
1,返回值为被删除键值对中的值
2,如果删除的key在map中不存在,则删除失败,返回值为null
boolean remove(Object key, Object value):根据key与value删除对应的键值
注意:
1,要求key与value必须同时与map中的某一个键值对象相同,才可以删除
2,返回值为是否删除成功
void clear():清空
改:
V put(K k,V v):修改一个键值对
注意:key在map存在就是修改,不存在就是添加
查:
int size();查询map中键值对的个数(map的长度)
boolean containsKey(Object key):判断当前map是否存在该key
boolean containsValue(Object value):判断当前map是否存在该value
Set<Map.Entry<K, V>> entrySet():获取当前map中所有键值对的集合
Entry:键值对
getKey():获取该键值的key
getVlue():获取该键值的Value
V get(Object key):通过key获取对应的value
V getOrDefault(Object key, V defaultValue):通过key获取对应的value
key:键
defaultValue:默认值
注意:如果键不存在,那么返回值为默认值,如果键存在,返回值键对应的值
boolean isEmpty():判断当前map是否为空
Set<K> keySet():获取字典中所有key的集合
Collection<V> values():获取字典中所有值的集合
注意:不能使用foreach直接遍历map
练习:
/*
* 使用Map完成王者荣耀助手的案例
* 选择分路--选择英雄--推荐装备
*/
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import javax.swing.Box;
public class Demo01 {
public static void main(String[] args) {
ArrayList<String> zhuangBei01 = new ArrayList<String>();
ArrayList<String> zhuangBei02 = new ArrayList<String>();
ArrayList<String> zhuangBei03 = new ArrayList<String>();
ArrayList<String> zhuangBei04 = new ArrayList<String>();
Map<String, ArrayList<String>> yingXiong01 = new HashMap();
Map<String, ArrayList<String>> yingXiong02 = new HashMap();
Map<String, ArrayList<String>> yingXiong03 = new HashMap();
Map<String, ArrayList<String>> yingXiong04 = new HashMap();
Map<String, Map<String, ArrayList<String>>> box = new HashMap<String, Map<String, ArrayList<String>>>();
//HashMap<String, Map<String, Map<String, ArrayList<String>>>> box = new HashMap<String, Map<String, Map<String, ArrayList<String>>>>();
Collections.addAll(zhuangBei01, "攻速鞋","电刀","无尽","破晓","破军","吸血");
Collections.addAll(zhuangBei02, "抵抗鞋","奔狼","极寒风暴","痛苦面具","魔女斗篷","霸者重装");
Collections.addAll(zhuangBei03, "攻速鞋","无尽","吸血刀","蝶刃","破晓","电刀");
Collections.addAll(zhuangBei04, "抵抗鞋","吸血书","回响之杖","帽子","法穿棒","金身");
//Collections.addAll(yingXiong, "鲁班七号","鲁班大师","伽罗","不知火舞","娜可露露");
yingXiong01.put("鲁班七号", zhuangBei01);
yingXiong02.put("鲁班大师", zhuangBei02);
yingXiong01.put("伽罗", zhuangBei03);
yingXiong04.put("不知火舞", zhuangBei04);
box.put("上路", yingXiong03);
box.put("中路", yingXiong04);
box.put("下路", yingXiong01);
box.put("辅助", yingXiong02);
System.out.println("欢迎来到王者荣耀助手");
System.out.println("请选择你的分路");
Set<String> fenLu = box.keySet();
for (String lu : fenLu) {
System.out.println(lu);
}
System.out.println("请输入你要选择的分路");
Scanner scanner = new Scanner(System.in);
String lu = scanner.next();
if (box.containsKey(lu)) {
Map<String, ArrayList<String>> yingXiong = box.get(lu);
Set<String> hero = yingXiong.keySet();
for (String string : hero) {
System.out.println(string);
}
System.out.println("请选择你选的英雄");
String yx = scanner.next();
if (yingXiong.containsKey(yx)) {
System.out.println("选择成功,你选择"+yx);
ArrayList<String> zhuangBei = yingXiong.get(yx);
System.out.println("推荐的装备是:"+zhuangBei);
}else {
System.out.println("所选英雄不存在");
}
}else {
System.out.println("输入错误");
}
}
}