HashMap
1. 初始化
  1. 初始容量(默认是16)
  2. 负载因子(默认是0.75)
  3. 容量的数量就是桶的数量; 当超过负载因子*容量这个阈值,那么hashmap就会扩容

2. put操作
  1. 当key为null时
    1. 判断null的桶是否为空,
    为空,直接插入一个Entry
    不为空,替换该Entry的value值
  2. 当key不为null
    2. 计算key hashcode的hash值
    3. 计算hash值所在的桶位置
    4. 判断桶位置是否已经存在数据
      1. 没有数据,那么就桶的头部插入该键值对
      2. 如果有数据,那么就判断链表中的每一个数据的key equal 新加的key
      如果相等,那么直接替换value
      如果不相等,那么就在桶的头部插入该键值对

3. addEntry添加Entry操作
  1. 根据桶的索引,获取链表
  2. 新建一个Entry节点插入链表
  3. 如果有需要,扩容,当前容量的2倍

4. get操作
  1. 当key为null
    1. 获取value值(可以为null)
  2. 当key不为null
    1. 获取桶位置
    2. 在链表中判断等key的value,返回该value
  3. 不存在key
    返回null值

ConcurrentHashMap
1. put操作
  1. value为null抛出异常
  2. value不为null
    1. 通过hash的高位获取segmens的索引值
    2. 对segment上锁
    3. 容量不满足,扩容
    4. 定位到具体的桶
    5. 在桶上判断key是否存在
      1.如果存在替换新值,返回旧值
      2. 如果不存在 添加一个节点,放置在链表头部,返回null
    6. 释放锁

2. get操作
  1. 根据hash定位到段,委托segment.put()
  2. 判断是否有桶的hash值与hash值相等
    1. 如果相等找到指定value
    1 value为null
加锁从新获取
    2 value不为nul
返回value
    2. 如果不相等
返回null
3. rehash操作
1. 扩容2倍
2. 在具体的segment上重哈希
3. 重哈希都是针对单独的一个segment进行操作,也就是说最后个个段上桶的数量可能不相等

JavaScript中对象数组 根据某个属性值进行排序的更多相关文章

  1. JavaScript中对象数组 根据某个属性值 然后push到新的数组

    原文链接 https://segmentfault.com/q/1010000010075035 将下列对象数组中,工资大于1w的员工,增加到对象数组 WanSalary中 var BaiduUser ...

  2. js sort方法根据数组中对象的某一个属性值进行排序(实用方法)

    js sort方法根据数组中对象的某一个属性值进行排序 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {nam ...

  3. js sort方法根据数组中对象的某一个属性值进行排序

    sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {name:'zopp',age:0}, {name:'gpp' ...

  4. JavaScript中对象数组 作业

    var BaiduUsers = [], WechatUsers = []; var User = function(id, name, phone, gender, age, salary) { t ...

  5. JavaScript中对象数组 作业题目以及作业

    var BaiduUsers = [], WechatUsers = []; var User = function(id, name, phone, gender, age, salary) { t ...

  6. JavaScript中对象数组去重方法

    在一次对后端返回的对象数组的操作时想通过indexOf()或者includes()的方法来实现对对象数组的去重但是行不通,因为用indexOf()返回的都是-1,一下记录两种对象数组(更具指定属性)去 ...

  7. JavaScript中对象数组,如何给对象添加一个新属性

    var a =[{name: 'Tom',age:20},{name: 'Tom2',age:22}] 现在给a数组中的第一个对象添加性别属性 a[0]['gender']='women' a[0][ ...

  8. JavaScript中对象数组 作业 题目如下

    var BaiduUsers = [], WechatUsers = []; var User = function(id, name, phone, gender, age, salary) { t ...

  9. 小程序开发之改变data中数组或对象的某一属性值

    前言:在小程序的开发中,我们在view中便利data中数组或对象时,很多情况下需要在js中动态改变数组或者对象中某一香的属性值. 效果图: 我给大家总结了案例如下:   wxml如下: <scr ...

随机推荐

  1. java编程小记

    http://blog.csdn.net/pipisorry/article/details/51050189 很久没写java,什么都不会了,小记一下. 类型转换 字符串转int类型:Integer ...

  2. Ubuntu 15.10下的WebStorm-11.0.3完美破解

    由于最新的JetBrains 发布了最新版本的IntelliJ IDEA的各个版本,而且更换了注册机的使用方式,这就导致了之前对WebStorm的破解方法不能在使用了.所以我们就必须另寻他法咯.如题, ...

  3. HTTP请求方法

    HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS, ...

  4. 1022. Digital Library (30) -map -字符串处理

    题目如下: A Digital Library contains millions of books, stored according to their titles, authors, key w ...

  5. UNIX环境高级编程——死锁

    操作系统中有若干进程并发执行,它们不断申请.使用.释放系统资源,虽然系统的进程协调.通信机制会对它们进行控制,但也可能出现若干进程都相互等待对方释放资源才能继续运行,否则就阻塞的情况.此时,若不借助外 ...

  6. C++ Primer 有感(标准库map类型)

    map是键-值对的集合.map类型通常可以理解为关联数组:可以使用键作为下标获取一个值,正如内置数组一样.而关联的本质在于元素的值于某个特定的键相关联,而并非通过元素在数组中的位置获取. 1.map对 ...

  7. 监视锁——Java同步的基本思想

    翻译人员: 铁锚翻译时间: 2013年11月13日原文链接: Monitors – The Basic Idea of Java synchronization如果你上过操作系统课程,你就知道监视锁( ...

  8. FT5X06 如何应用在10寸电容屏(linux-3.5电容屏驱动简析&移植10寸电容屏驱动到Android4.2) (by liukun321咕唧咕唧)

    这是几个月以前的东西了,在彻底遗忘之前拿出来好好写写.做个笔记,也算是造福后来人了.在做这个项目之前,没有做过电容屏的驱动,印象中的电容触摸屏是不需要校正的.IC支持多大的屏就要配多大的屏.但是拿到需 ...

  9. [Ext.Net] 1.x GridPanel列数过多给Menu菜单加滚动条

    转自:http://www.ext.net.cn/thread-1944-1-2.html 当GirdPanel列数过多,查看列的显示隐藏时会出现下面下面情况,有部分超出了界面被遮罩住了   要解决这 ...

  10. ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)

    ===================================================== ffdshow源代码分析系列文章列表: ffdshow 源代码分析 1: 整体结构 ffds ...