JAVASE高级 day_7 集合6:Map

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);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值