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. 仿IOS7日期选择控件(新)

    前面也写过好几篇仿IOS日期控件的文章,不过基本上都是基于Wheelview修改而来,大致实现了滑轮选择选项的效果,其实和ios7及以上的效果还是相差甚远,而本文中所展现的这个控件虽也是从网上而来(呵 ...

  2. 1049. Counting Ones (30)

    题目如下: The task is simple: given any positive integer N, you are supposed to count the total number o ...

  3. [Redmine] Centos5上安装Redmine3.0+nginx+thin部署

    项目管理的需要所以安装Redmine,其实wiki放在上面也不错的. 首先是安装,ruby应用第一次装,把坑记住. nginx, mysql是已经安装好的,只需要配置, 结合nginx的部署方式很多, ...

  4. Unity UGUI基础之Text

    Text作为UGUI最基础的控件以及最常用的控件,它在项目中的应用绝对可以算是最多的,任何一个UI界面可以说都离不开它,它的基本属性如下: 一.rect transform组件: rect trans ...

  5. 我的第二个独立开发的邮箱类App—“简邮”(支持QQ、雅虎、阿里云、Outlook)

    360手机市场地址: 360市场 其它市场还在审核,囧... 为什么做这个App? 主要有两个原因 1.10月份正逢校招季,--当时和面试官介绍了这个APP 2.在苹果手机上看到一款内置的邮箱app支 ...

  6. 【Unity Shaders】Reflecting Your World —— 在Unity3D中创建一个简单的动态Cubemap系统

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  7. Caffe框架,训练model并测试数据

    1. 训练model #!/usr/bin/env sh ./build/tools/caffe train --solver=examples/focal_length/focal_solver.p ...

  8. Java实现二叉树的创建和遍历操作(有更新)

    博主强烈建议跳过分割线前面的部分,直接看下文更新的那些即可. 最近在学习二叉树的相关知识,一开始真的是毫无头绪.本来学的是C++二叉树,但苦于编译器老是出故障,于是就转用Java来实现二叉树的操作.但 ...

  9. (一)php的基本知识和一些注意点

    注意:任何程序,包括php,在运行时都在内存中进行,php代码需要被读取到内存中才能执行. [php的运行方式] 1.通过服务器(例如apache)调用. 2.通过命令行调用(不需要服务器参与,因为没 ...

  10. 关于JavaScript中的几种匿名行数的写法

     匿名函数没有实际名字,也没有指针,怎么执行滴? 其实大家可以看看小括号的意义就应该可以理解.小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括 ...