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. Android的GridView的用法-android学习之旅(二十七)

    Gridview简介 GridView和ListView有相同的父类AbsListView.他和ListView唯一的区别是Gridview可以显示多列,如果不设置列数,就默认显示一列,变成了List ...

  2. Android的SeekBar和RateBar的使用-android学习之旅(三十二)

    SeekBar简介 SeekBar允许用户拖动,进行调节经常用于音量调节等方面. android:thumb设置drawable对象来表示拖动的物体. setOnSeekBarChangeListen ...

  3. 【Unity Tips】备忘录(扫盲篇)

    写在前面 Unity3D虽然是个非常方便的游戏引擎,但还是有一些地方会产生一些让人莫名其妙的问题,而且debug半天也不知道到底哪里错了.往往在经过了大量的log之后,也许我们才顿悟,原来Unity内 ...

  4. 02_Weblogic课程之安装篇:RedHat下JDK安装,RedHat下Weblogic安装,目录结构,环境变量设置

     1  Weblogic的安装方式有三种: 一.GUI方式安装    (java –jar wls1035_generic.jar [-mode=gui])这是默认的 二.Console方式安装  ...

  5. python的sys模块

    Sys模块函数之多,我只能选取自己认为比较实用的一些函数列在此处.借马云找员工的说法,"找最合适的而不是最天才的",这句话,我个人觉得在很多方面都能适应,学习也不在话下.Sys模块 ...

  6. 02_Android写xml文件和读xml文件

     新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml .控制台输出结果

  7. 敏捷测试(4)--基于story的敏捷基础知识

    基于story的敏捷基础知识----需求管理(一) 基于story进行需求管理 (1)使用story模式来管理需求,将庞大的MRD划分为一个个合适粒度,且可独立交付的story(通常每个story能在 ...

  8. (五十九)iOS网络基础之UIWebView简易浏览器实现

    [UIWebView网络浏览器] 通过webView的loadRequest方法可以发送请求显示相应的网站,例如: NSURL *url = [NSURL URLWithString:@"h ...

  9. OC语言(七)Block复习

    看下面一道Block的面试题: int i = 10; void(^myBlock)() = ^{ NSLog(@"%d",i); }; i = 100; myBlock(); 经 ...

  10. C++ Primer 有感(复制控制)

    1.不管类是否定义了自己的析构函数,编译器都 自动执行类中非static数据成员的析构函数. 2.如果我们没有定义复制构造函数,编译器就会为我们合成一个.合成复制构造函数的行为是,执行逐个成员初始化, ...