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. 二叉查找树

posted @ 2021-08-03 09:43  触碰A阳光  阅读(296)  评论(0编辑  收藏  举报