Map的实现

本文内容摘自:http://wiki.jikexueyuan.com/project/java-collection/hashmap.html,要看详解,请去阅读原文!

HashMap

  1. HashMap 是基于哈希表的 Map 接口的非同步实现,并允许使用 null 值和 null 键;
  2. 需要注意的是:Hashmap 不是同步的,如果多个线程同时访问一个 HashMap,而其中至少一个线程从结构上(指添加或者删除一个或多个映
    射关系的任何操作)修改了,则必须保持外部同步,以防止对映射进行意外的非同步访问

  3. 当我们 put 的时候,如果 key 存在了,那么新的 value 会代替旧的 value,并且如果 key 存在的情况下,该方法返回的是旧的 value,
    如果 key 不存在,那么返回 null

  4. 当我们往 HashMap 中 put 元素的时候,先根据 key 的 hashCode 重新计算 hash 值,根据 hash 值得到这个元素在数组中的位置(即下标
    ),如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。如果数组
    该位置上没有元素,就直接将该元素放到此数组中的该位置上

  5. 从 HashMap 中 get 元素时,首先计算 key 的 hashCode,找到数组中对应位置的某一元素,然后通过 key 的 equals 方法在对应位置的链
    表中找到需要的元素

  6. 简单地说,HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来
    保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据 hash 算法来决定其在数组中的存储位置,在根据 equals 方法决定其在该数组
    位置上的链表中的存储位置;当需要取出一个Entry 时,也会根据 hash 算法找到其在数组中的存储位置,再根据 equals 方法从该位置上的链表中
    取出该Entry

  7. 遍历方式:
    1.   这种遍历方式效率高(推荐这种方式)
    2. Map map = new HashMap();
        Iterator iter = map.entrySet().iterator();
        while (iter.hasNext()) {
        Map.Entry entry = (Map.Entry) iter.next();
        Object key = entry.getKey();
        Object val = entry.getValue();
        }

        这种遍历方式效率低

      Map map = new HashMap();
        Iterator iter = map.keySet().iterator();
        while (iter.hasNext()) {
        Object key = iter.next();
        Object val = map.get(key);
        }

转载于:https://www.cnblogs.com/LTmei/p/8573779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值