zoukankan      html  css  js  c++  java
  • Map

    Map

    1. 区别与集合,在《Core Java》中称为 映射

    2. 有key有value key -> value

    3. Map与Collection的区别

      1. Map集合的特点

        映射到对象上,一个映射(Map)不可包含重复的键,每个键最多只能映射一个值

        1个key对应一个value

      2. 区别

        1. Map存储的元素是成对出现的,Collection存储的元素是单个出现的

        2. Map的键是唯一的,Collection的List接口是可重复的,Set接口是唯一的

        3. Map的值可以重复

          1 -> a
          2 -> a
          
      3. 要点

        1. Map集合的数据结构针对键有效,跟值无关
        2. Collection集合的数据结构针对元素有效
    4. Map的功能

      1. 添加
        • V put(K key, V value);
        • 键不存在的情况下,直接存储元素,会返回null
        • 键存在的情况下,新值替换旧值,返回旧值
      2. 删除
        • void clear(); 移除所有的键值对元素
        • V remove(Object key); 根据键值删除,返回删除值
      3. 判断
        • Boolean containKey(Object key); 判断集合是否包含指定的Key
        • Boolean containsValue(Object value); 判断集合是否包含指定的value
        • Boolean isEmpty(); 判断集合是否为空
      4. 获取
        • Set<Map.Entry<K, V>> entrySet(); 返回键值对对象集合
        • v get(Object key); 根据键获取值
        • Set keySet(); 返回所有键组成的集合
        • Collection values(); 获取所有值的集合
      5. 大小
        • int size(); 返回Map集合中键值对的对数
    5. 继承体系

      image-20210729183737033

    6. 散列表

      1. 不在意元素的顺序,能够快速的查找元素数据

      2. 工作原理

        1. 散列表为其中的每一个对象计算出一个整数,称之为散列码。根据散列码保存在对应的位置

        2. 在java中,散列表用的是【数组+链表】的实现,每一个列表称之为 => 底层数组的一个位置

        3. 散列冲突

          1. 一个桶上可能会遇到被占用的情况(hashCode散列码相同,存储到了同一个位置上(存储到同一个桶上了))

          2. 如何避免,或者解决

            1. 此时需要该对象与桶上的对象进行比较,看看该对象是否存在桶上,存在就不添加,反之添加
            2. hashCode算法足够好,桶的数目足够多可以避免
            3. JDK1.8中,桶满时会从链表变成平衡二叉树
          3. 装载因子:决定何时对散列表进行在散列

            再散列:创建一个桶数更多的散列表,将原有的元素插入到新的桶中

          4. 装载因子默认值是 0.75

            如果表中的元素个数已经超过了75%那么就会用一个双倍桶数的散列表进行再散列

    7. 红黑树

      1. AVL树:最早的平衡二叉树之一,windows对进程地址空间的管理用到过
      2. 红黑树,平横二叉树
      3. B/B+树:磁盘文件组织 数据索引 数据库索引
      4. Trie树(字典树)用于统计排序大量的字符串
    8. 二叉查找树

  • 相关阅读:
    git学习——<二>git配置文件
    使用Python打造一款间谍程序
    Flutter gradle采坑
    逆向破解之160个CrackMe —— 031
    逆向破解之160个CrackMe —— 030
    逆向破解之160个CrackMe —— 029
    逆向破解之160个CrackMe —— 028
    逆向破解之160个CrackMe —— 027
    逆向破解之160个CrackMe —— 026
    逆向破解之160个CrackMe —— 025
  • 原文地址:https://www.cnblogs.com/JQ04/p/15092912.html
Copyright © 2011-2022 走看看