今天看hashMapJDK7版,水很深,看的也痛苦~推一个博主:http://www.cnblogs.com/xrq730/

看了源码,才发现自己基础真的很薄弱,虽然当初也是下了很多的经历,但是毕竟大学浪费了好多时间,底子自然也就不够,无厚积而又无薄发,自勉。

简单的一些总结:

1、基础知识回顾

a、位运算符:与或与亦或(源自百度)

“按位异或”运算符,是双目运算。

按位异或运算符^

逻辑运算均是按位进行操作,真值表如下:

AND (位与&) OR ( 位或| ) XOR ( 位异或^ )  

1 & 1 = 1

1 & 0 = 0

0 & 1 = 0

0 & 0 = 0

 1 | 1 = 1

1 | 0 = 1

0 | 1 = 1

0 | 0 = 0

 1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0

 

例如:10100001^00010001=10110000

0^0=0,0^1=1   0异或任何数=任何数

1^0=1,1^1=0   1异或任何数=任何数取反

任何数异或自己=把自己置0

b、左移、右移、逻辑左移(摘抄自博文:http://annegu.iteye.com/blog/539465     以及百度):

============================================================

43210      位数

--------

 1010      十进制:10     原始数         number

10100      十进制:20     左移一位       number = number << 1;

 1010      十进制:10     右移一位       number = number >> 1

============================================================

4<<2 中4的进制表示法为0000 0100,左移2位后为0001 0000,则结果为1*2^4=16

c、进制之间的转换(自己整理了下)

首先是最常用的二进制与十进制之间的转换:

1、二进制转换为十进制:

正数: 100101转换为十进制,方法为:1*2的5次方+0*2的4次方+0*2的3次方+1*2的2次方+0*2的1次方+2*1的0次方(其中规律很简单,应该很清楚的就能总结出来,我就不去描述了)

负数:忘了(会补充)

2、十进制转换为二进制:

10除以2等于5余数为0,5除以2为2余数为1。。。算完后从下往上取,是1010

基础先到这里,有些理解不透彻的地方如位移运算符的符号位在逻辑右移时补0.。。。还有进制转换中负数的部分忘记了,记录下以后再补,补完总结下hashmap源码,这就是我这篇博文需要写的。

=============================================================2017-10-25

一些基础的定义:

数组:内存中开辟的一块连续的区域

链表:一个对象中,持有下一个对象的内存地址

哈希表(图):数组+链表结构。

存储方式:

通过key的哈希值h&(map.lenth-1)获取到   数组中的一个位置,然后以链表的形式将数据存储

这里map.length要为2的次幂时,(map.lenth-1)的低位为1

2的4次方 =16 -1 =15            1111

2的5次方 =32-1=31              11111

&

hash(eg:10101)

结果:以低位为准,一定不会越界

目的:1、分布的位置不会下标越界

2、分布的更加均匀,提升性能

扩容:系数0.75

数组使用超过0.75(测算)时,2倍扩充(保证下标仍以低位为准)。

扩容时元素会重新分配,消耗资源与速度。

阅读HashMap——jdk7时遇到的问题记录的更多相关文章

  1. 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释

    在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...

  2. ON DUPLICATE KEY UPDATE 当记录不存在时插入,当记录存在时更新

    MySQL 当记录不存在时插入,当记录存在时更新网上基本有三种解决方法.第一种:示例一:插入多条记录假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:INSERTINT ...

  3. 在使用cognos时遇到的问题记录帖

    在使用cognos时遇到的问题记录帖 1.开一个project 报无法访问位于 URL 的服务: http://localhost:80/ibmcognos/cgi-bin/cognos.cgi?b_ ...

  4. 【转】MySQL 当记录不存在时insert,当记录存在时update

    MySQL当记录不存在时insert,当记录存在时更新:网上基本有三种解决方法 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句 ...

  5. MyBatis 插入时返回刚插入记录的主键值

    MyBatis 插入时返回刚插入记录的主键值 一.要求: 1.数据库表中的主键是自增长的,如:id: 2.获取刚刚插入的记录的id值: 二.源代码: 1.User.java package cn.co ...

  6. Java中HashMap 初始化时容量(参数)如何设置合适?

    问题引入 注:本文代码源自java 9. 阿里的插件对于初始化HashMap时,调用无参构造方法,提示如下: 那么问题来了,如果已知需要向 map 中 put n次,那么需要设定初始容量为多少? 单纯 ...

  7. MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...

  8. MySQL 当记录不存在时insert,当记录存在时update

    MySQL当记录不存在时insert,当记录存在时更新:网上基本有三种解决方法 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句 ...

  9. SqlDataReader阅读器关闭时尝试调用 HasRows 无效

    SqlDataReader阅读器关闭时尝试调用 HasRows 无效 原创长白山上放羊娃 发布于2018-07-25 00:29:27 阅读数 538  收藏 展开 在SqlHelper中封装好的Sq ...

随机推荐

  1. WPF,SilverLight中直线的样式示例

    原文:WPF,SilverLight中直线的样式示例 XAML代码:// LineStyle.xaml<Viewbox Width="600" Height="50 ...

  2. UML静态视图——类图、对象图、包图

    绘画类的最重要的图是抽象类.让我们回顾一下类的基本内容. 一.分类 1.类的概念: 面向对象编程的类是一个基本概念.类是具有相同特性的.办法.集合语义和一组对象的关系. 2.类分类: 实体类:保存要放 ...

  3. python 教程 第三章、 运算符与表达式

    第三章. 运算符与表达式 1)    运算符 + 加 - 减 * 乘 ** 幂 / 除 // 取整除 % 取模 << 左移 >> 右移 & 按位与 | 按位或 ^ 按位 ...

  4. poj 1125 Stockbroker Grapevine(多源最短)

    id=1125">链接:poj 1125 题意:输入n个经纪人,以及他们之间传播谣言所需的时间, 问从哪个人開始传播使得全部人知道所需时间最少.这个最少时间是多少 分析:由于谣言传播是 ...

  5. C++该typeid和dynamic_cast

    1.typeid在没有虚拟函数的(不相关的动态绑定),typeid它只返回操作对象的实际类型 2.typeid涉及到动态联编问题时(使用基类指针p或者引用p操作派生类对象),typeid(p)返回基类 ...

  6. WPF实用指南一:在WPF窗体的边框中添加搜索框和按钮

    原文:WPF实用指南一:在WPF窗体的边框中添加搜索框和按钮 在边框中加入一些元素,在应用程序的界面设计中,已经开始流行起来.特别是在浏览器(Crome,IE,Firefox,Opera)中都有应用. ...

  7. Angularjs html文本显示

    <body ng-app="siteApp"> <div ng-controller="newsDetailController as vm" ...

  8. 利用shell脚本实现计划任务功能 V1.2

    2013.05.10  mytask 1.2 主程序休眠时间分成若干小的时间片断分段休眠,避免长时间的休眠不能及时响应系统信号. 2013.05.07 mytask 1.1 昨天发布了mytask1. ...

  9. GzipStream的简单使用压缩和解压

    压缩和解压都需要用到三个流实例,分别是文件读取流.文件写入流.压缩流. 读取流和写入流有多种形式,压缩流就一种GzipStream. 不同的是对于压缩,是需要用文件写入流作为创建压缩流实例的参数, 压 ...

  10. ML:多变量线性回归(Linear Regression with Multiple Variables)

    引入额外标记 xj(i) 第i个训练样本的第j个特征 x(i) 第i个训练样本对应的列向量(column vector) m 训练样本的数量 n 样本特征的数量 假设函数(hypothesis fun ...