• Map与HashMap


    一、Map

        

    1、关系

    Map:

      双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x)

    HashMap:

      作为Map的主要实现类;线程不安全的,效率高;存储null的key和value

    LinkedHashMap:

      保证在遍历map元素时,可以按照添加的顺序实现遍历。

      原因:在原有的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个元素。

      对于频繁的遍历操作,此类执行效率高于HashMap

    TreeMap:

      保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序

      底层使用红黑树

    Hashtable:

      作为古老的实现类;线程安全的,效率低;不能存储null的key和value

    Properties:

      常用来处理配置文件。key和value都是String类型

    2、概述

    • Map与Collection并列存在。用于保存具有映射关系的数据:key-value
    • Map 中的 key 和 value 都可以是任何引用类型的数据
    • Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应 的类,须重写hashCode()和equals()方法
    • 常用String类作为Map的“键”
    • key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到 唯一的、确定的 value
    • Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和 Properties。其中,HashMap是 Map 接口使用频率最高的实现类

    3、结构

      

    • Map中的key:无序的、不可重复的,使用Set存储所有的key ---> key所在的类要重写equals()和hashCode() (以HashMap为例)
    • Map中的value:无序的、可重复的,使用Collection存储所有的value --->value所在的类要重写equals()
    • 一个键值对:key-value构成了一个Entry对象。
    • Map中的entry:无序的、不可重复的,使用Set存储所有的entry

    4、常用方法

      

     源码查看:

    //将指定key-value添加(修改)到当前map对象中
    V put(V key, V value);
    //将m中所有key-value对存放到当前map中
    void putAll(Map<? extends K, ? extends V> m);
    //移除指定key的key-value对,并返回value
    V remove(Object key);
    //清空当前map中所有数据
    void clear();

    二、Hashmap

    1、概述

      HashMap 也是我们使用非常多的 Collection,它是基于哈希表的 Map 接口的实现,以 key-value 的形式存在。在 HashMap 中,key-value 总是会当做一个整体来处理,系统会根据 hash 算法来来计算 key-value 的存储位置,我们总是可以通过 key 快速地存、取 value。下面就来分析 HashMap 的存取。

    2、定义

    public class HashMap<K,V> extends AbstractMap<K,V>
        implements Map<K,V>, Cloneable, Serializable 

      

    3、结构

      影响 HashMap 性能的两个重要参数:“initial capacity”(初始化容量)和”load factor“(负载因子)。简单来说,容量就是哈希表桶的个数,负载因子就是键值对 个数与哈希表长度的一个比值,当比值超过负载因子之后,HashMap 就会进行 rehash 操作来进行扩容。 

      HashMap 的大致结构如下图所示,其中哈希表是一个数组,我们经常把数组中的每 一个节点称为一个桶,哈希表中的每个节点都用来存储一个键值对。在插入元素时, 如果发生冲突(即多个键值对映射到同一个桶上)的话,就会通过链表的形式来解 决冲突。因为一个桶上可能存在多个键值对,所以在查找的时候,会先通过 key 的哈希值先定位到桶,再遍历桶上的所有键值对,找出 key 相等的键值对,从而来获 取 value。

      

  • 相关阅读:
    深入Java虚拟机(4)——网络移动性
    安装ftp碰到的问题及解决方法
    6.设置ListView的Item的高度无效
    hdu1181(变形课)
    ZooKeeper分布式集群部署及问题
    管理线程之创建线程
    Linux系统编程——多线程实现多任务
    Request.Params用法,后台接收httpget参数
    resharper警告 :linq replace with single call to FirstOrDefault
    SQL Prompt几个快捷键
  • 原文地址:https://www.cnblogs.com/Zzzzn/p/12500099.html
Copyright © 2020-2023  润新知