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. javascript 下拉列表 自动取值 无需value

    <select id="applyType" name="$!{status.expression}" class="inp" onc ...

  2. Java-IO之BufferedReader(字符缓冲输入流)

    BufferedReader是缓冲字符输入流,继承于Reader,BufferedReader的作用是为其他字符输入流添加一些缓冲功能. BufferedReader主要的函数列表: Buffered ...

  3. ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)

    查找员工编号为7369的领导: 1 SELECT LEVEL,E.* FROM EMP E CONNECT BY PRIOR E.MGR = E.EMPNO START WITH E.EMPNO = ...

  4. js对象、构造函数、命名空间、方法、属性

     <script language="javascript">   var myNameSpace = new Object(); //构造一个命名 空间myCla ...

  5. 利用gradle添加构建版本号

    在java的程序中,貌似都没有这个构建版本号的概念,用的诸如eclipse, idea和android studio的IDE也没有直接提供构建版本号的选项.不过我却想在android程序的版本号当中添 ...

  6. jQuery 异步上传插件 Uploadify302 使用 (JavaEE Spring MVC)

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.而且是Ajax的,省去了自己写Ajax上传功能的麻烦.不过官方提供的实例时php版本的,本文将详细介绍Uploadify ...

  7. MySQL数据库内置函数

    mysql数据库中提供了很丰富的函数.mysql函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操作. 简单介绍几类函数的 ...

  8. iOS中 陀螺仪/加速器 韩俊强的博客

    引进框架: #import <CoreMotion/CoreMotion.h> 定义属性初始化相关: #import "ViewController.h" #impor ...

  9. 使用js动态添加组件

    在文章开始之前,我想说两点 1 自己初学js,文章的内容在大神看来可能就是不值一提,但是谁都是从hello world来的,望高   手不吝指教# 2 我知道这个标题起的比较蛋疼,大家看图就能说明问题 ...

  10. Java 8新特性探究(一) JEP126特性lambda表达式和默认方法

    Lambda语法 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.la ...