• Java基础24-集合类3(Map接口)


    一、Map简介

    Map接口储存一组成对的键-值对象,提供key(键)到value(值)的映射。

    Map中的key不要求有序,不允许重复。value同样不要求有序,但可以重复。

    最常见的Map实现类是HashMap,他的储存方式是哈希表,优点是查询指定元素效率高

    映射关系(两个集合):A集合和B集合
    * A集合中的每一个元素都可以在B集合中找到一个唯一的一个值与之对应
    严格上说Map并不是集合,而是两个集合之间的映射关系(Map接口并没有继承于Collection接口)
    * 然而因为Map可以存储数据(每次存储都应该存储A集合中一个元素key和B集合中一个元素value)
    Key集合不允许重复,Set集合
    * Value集合允许重复,List集合

    二、Map映射的关系图

    三、常用方法

    四、Map集合的遍历

    因为Map接口并没有继承于Collection接口也没有继承于Iterable接口,所以不能直接对Map使用for-each操作

    1.获取Map中所有key所组成的集合(key是不能重复的,类似于Set)

    public static void main(String[] args) {
        Map<String,Object> map=new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        map.put("key4", "value4");
        System.out.println(map);
    Set<String> keys=map.keySet();
    for (String key : keys) {
        System.out.println(key+":"+map.get(key));
    //{key1=value1, key2=value2, key3=value3, key4=value4}
    }
    }

    输出:

    key1:value1
    key2:value2
    key3:value3
    key4:value4

    2.//获取Map中所有value所组成的集合(value可以重复)

    Collection<Object> values=map.values();
    for (Object object : values) {
        System.out.println(object);
    }
    /*
    value1
    value2
    value3
    value4
     * */

    3.获取Map中所有的Entry(key-->value)

    Set<Map.Entry<String, Object>> entrys=map.entrySet();
    for (Map.Entry<String, Object> entry : entrys) {
        String key=entry.getKey();//获取key
        Object value= entry.getValue();//获取value
        System.out.println(key+":"+value);
    }

    五、集合前缀相同问题

    我们发现Set接口和Map接口有很多前缀相同的实现类,比如说HashSet和HashMap

    如果集合前缀相同,说明底层算法是一样的,现在单独使用HashSet和HashMap来研究
    * 通过阅读源代码发现,相同算法的Set底层用的是相同算法的Map
    * 把Set的集合对象作为Map的Key,Object常量为value
    * 因此:更符合我们所说的在Map中,所有的key就是一个Set集合

    六、案例

    计算一个字符串中没一个字符出现的次数

    String str="dasdbsdhabsdvjasvdja";
    char[] arr=str.toCharArray();
    //key:存储字符名,value:存储出现次数
    Map<Character,Integer> map2=new TreeMap<>();
    //循环得到每一个字符
    for (char c : arr) {
        //判断当前字符是否在Map中的key存在
        if(map2.containsKey(c)) {
            //当前Map的key包含该字符,此时取出该value值递增1,再存放进去
            Integer old=map2.get(c);
            map2.put(c, old+1);
        }else {
            //当前Map的key不包含该字符,把该字符存储到map中,设置value为:
            map2.put(c, 1);
        }
  • 相关阅读:
    python基础——反射
    python基础——模块
    python基础——异常处理、递归
    python基础——生成器与迭代器
    python基础——装饰器
    Python常见面试题
    Socket网络编程
    爬虫解析相关
    爬虫请求相关
    初识爬虫
  • 原文地址:https://www.cnblogs.com/LuckyGJX/p/9119537.html
Copyright © 2020-2023  润新知