Map
Map的体系结构
Map 的典型实现:
HashMap LinkedHashMap TreeMap HashTable (Properties)
Map的特点:
1 与Collection并列的集合
2 用于保存具有映射关系的对象 (映射对象以键值对的形式存在 key--value)
3 不能包含重复的键; 每个键可以映射到最多一个值
4 键不能重复 值可重复
5 元素的存取是无序的
数学中的映射 一个x对应一个y 一个y 可以被多个x映射
Map接口的常用方法
添加 删除 修改
public static void main(String[] args) {
//Map集合键唯一,一个键对应一个键值,但是一个键值可以对应多个键
Map map = new HashMap();
//添加元素
map.put("java","蓝桥");
map.put(456,"world");
map.put("hello","world");
map.put(1.0,2.0);
map.put(456,789);
System.out.println(map);
System.out.println("-----------------------");
//使用泛型创建集合
Map<String,String> map1 = new HashMap<>();
//添加元素
map1.put("10010","联通");
map1.put("10086","移动");
map1.put("119","火警");
//添加map中的所有元素
map1.putAll(map);
//根据键修改值,这种修改必须保证所修改的键值对在map中存在相应的映射关系
map1.replace("456","Hello");
System.out.println(map1.get(456));
System.out.println(map1);
}
public static void main(String[] args) {
// 创建集合
Map<String, String> map = new HashMap<>();
//添加元素
map.put("1001","张三");
map.put("1002","李四");
map.put("1003","王五");
map.put("1004","王五");
Map<String,String> map1 = new HashMap<>();
map1.put("20001","AAA");
map1.put("20002","BBB");
map1.put("20003","CCC");
// 输出集合对象
map.putAll(map1);//将map1中的元素添加到map中
//remove
map.remove("1001");//根据键删除集合中的键值对
boolean b = map.remove("1002","王五");//根据键值对删除map中的键值对 但是传入的键值对必须和map中的键值对匹配
System.out.println(b);
System.out.println(map);
}
// 修改
map.replace("1003","admin");//根据键修改值
//这种修改必须保证所修改的键值对在map中存在相应的映射关系
map.replace("1003","admin","adminstrator");
System.out.println(map);
获取的方法
public static void main(String[] args) {
//创建Map集合
Map<String,String> map = new HashMap<>();
map.put("郭靖","黄蓉");
map.put("杨过","小龙女");
map.put("张无忌","赵敏");
//通过键 获取值 V get(Object key)
String v1 = map.get("杨过");
System.out.println(v1);
// 获取所有的键的Set集合
Set<String> keySet = map.keySet();
for(String str : keySet){
System.out.println(str);
}
//获取所有的 值的集合 集合是Collection
Collection<String> values = map.values();
for (String str : values){
System.out.println(str);
}
System.out.println("----------------------");
// 获取所有的 键值对的Set集合
Set<Map.Entry<String,String>> entrySet = map.entrySet();
for(Map.Entry<String,String> entry : entrySet ){
System.out.println(entry);
}
}
判断的方法
//判断 判断集合是否为空
System.out.println(map.isEmpty());// 集合中不包含任何的键值对 则返回true
System.out.println(map.containsKey("1002"));//判断集合是否包含某一个key
System.out.println(map.containsValue("admin"));//判断集合中是否包含某一个值
Map集合的遍历
方式一 :Map提供的方法
获取Map集合中的键集 再使用map所提供的通过键获取值的方式来进行遍历所有的元素
public static void main(String[] args) {
//创建Map集合
Map<String,String> map = new HashMap<>();
map.put("郭靖","黄蓉");
map.put("杨过","小龙女");
map.put("张无忌","赵敏");
//遍历方式一:获取Map集合中的键集 在使用map所提供的通过键获取值的方式来进行遍历所有的元素
Set<String> keySet = map.keySet();
for(String key : keySet){
String value = map.get(key);
System.out.println(key +"--"+value);
}
}
方式二:Map.Entry
//方式二
Set<Map.Entry<String,String>> entrySet = map.entrySet();
for(Map.Entry<String,String> entry : entrySet){
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + " ----" + value);
}
// 使用迭代器进行迭代 entrySet
Iterator<Map.Entry<String,String>> iter = entrySet.iterator();
while(iter.hasNext()){
Map.Entry<String,String> entry = iter.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + " ----" + value);
}
练习
需求:使用Map集合存储自定义对象
学生对象:姓名 年龄 在map中 以学生对象为值 而以学生的学号为键
public class MapTest {
public static void main(String[] args) {
Map<String,Student> map = new HashMap<>();
Student st1 = new Student("崔云凯",21);
Student st2 = new Student("陈怀和",23);
Student st3 = new Student("张艳文",22);
Student st4 = new Student("古力达娜",20);
map.put("20191101",st1);
map.put("20191102",st2);
map.put("20191103",st3);
map.put("20191104",st4);
// 遍历集合
//方式一:
Set<String> keys = map.keySet();
Iterator<String> iter = keys.iterator();
while(iter.hasNext()){
String key = iter.next();
Student value = map.get(key);
System.out.println(key + "--" + value);
}
System.out.println("---------------------------");
// 方式二:
Set<Map.Entry<String,Student>> entries = map.entrySet();
Iterator<Map.Entry<String,Student>> entryIterator = entries.iterator();
while(entryIterator.hasNext()){
Map.Entry<String,Student> entry = entryIterator.next();
String key = entry.getKey();
Student value = entry.getValue();
System.out.println(key +"---" + value);
}
System.out.println("---------------------------");
//使用增强for输出
for(Map.Entry<String,Student> entry : entries){
String key = entry.getKey();
Student value = entry.getValue();
System.out.println(key +"---" + value);
}
}
}