1. import java.util.*;
  2.  
  3. public class Bs {
  4.  
  5. //Integer.highestOneBit((number - 1) << 1)分解
  6.  
  7. public static void main(String []args) {
  8.  
  9. //number(hashMap需要多大的长度,先简单的理解为table.length)
  10. int a = 1;//根据传入的table.length=1,计算这个hashMap需要多大的长度
  11. int b = 3;
  12. int c = 5;
  13. int d = 8;
  14. System.out.println("初始结果----------------------------------");
  15. System.out.println(Integer.toBinaryString(a));//
  16. System.out.println(Integer.toBinaryString(b));//
  17. System.out.println(Integer.toBinaryString(c));//
  18. System.out.println(Integer.toBinaryString(d));//
  19. System.out.println("");
  20.  
  21. //number - 1 ****************************************************为什么减1?--->保证结果是最近偶数
  22. int a1 = 1-1;//
  23. int b1 = 3-1;//
  24. int c1 = 5-1;//
  25. int d1 = 8-1;//7
  26.  
  27. //number
  28. //int a1 = 1; //不减1最终的结果是1-->2;应该是1
  29. //int b1 = 3; //不减1最终的结果是3-->4;应该是4
  30. //int c1 = 5; //不减1最终的结果是5-->8;应该是8
  31. //int d1 = 8; //不减1最终的结果是8-->16;应该是8
  32.  
  33. //为什么减1
  34. //如果这个数为奇数,减1后是比它小1的偶数,这个偶数是2的倍数,如果乘2,可能恰好是一个2的次方
  35. //如果这个数为偶数,可能本身它就是一个2的次方,那么通过下面的移位算法,计算出来的空间就会大,浪费空间
  36.  
  37. System.out.println("减1结果----------------------------------");
  38. System.out.println(Integer.toBinaryString(a1));//
  39. System.out.println(Integer.toBinaryString(b1));//
  40. System.out.println(Integer.toBinaryString(c1));//
  41. System.out.println(Integer.toBinaryString(d1));//
  42. System.out.println("");
  43.  
  44. //(number - 1) << 1 ****************************************************为什么左移?-->取偶数->大部分是最近的偶数了
  45.  
  46. //为什么左移
  47. //<<:左移运算符,num << 1,相当于num乘以2
  48. //左移后低位是由0来补充的
  49. //JAVA中没有<<<的,因为左移后低位肯定是由0来补充的
  50.  
  51. int a2 = a1 << 1;
  52. int b2 = b1 << 1;
  53. int c2 = c1 << 1;
  54. int d2 = d1 << 1;
  55. System.out.println("左移结果----------------------------------");
  56. System.out.println(Integer.toBinaryString(a2));//0 0 1
  57. System.out.println(Integer.toBinaryString(b2));//100 4 3
  58. System.out.println(Integer.toBinaryString(c2));//100 8 5
  59. System.out.println(Integer.toBinaryString(d2));//1110 14 8
  60. System.out.println("");
  61.  
  62. System.out.println("最终结果----------------------------------");
  63. System.out.println("");
  64. //Integer.highestOneBit((number - 1) << 1) ****************************************************为什么取111的形式然后做了个减法运算?
  65. int a3 = highestOneBit(a2);
  66. int b3 = highestOneBit(b2);
  67. int c3 = highestOneBit(c2);
  68. int d3 = highestOneBit(d2);
  69. System.out.println("1--->"+a3);
  70. System.out.println("3--->"+b3);
  71. System.out.println("5--->"+c3);
  72. System.out.println("8--->"+d3);
  73. System.out.println("");
  74.  
  75. System.out.println("修正0值----------------------------------");
  76. int fix = 1 >= (1 << 30)
  77. ? (1 << 30)
  78. : (1 > 1) ? 0 : 1;
  79.  
  80. int f1 = (1 > 1) ? 0 : 1;
  81. System.out.println("1--->"+f1);
  82. int f2 = 1 >= (1 << 30) ? (1 << 30) : 1;
  83. System.out.println("2--->"+f2);
  84. System.out.println("3--->"+fix);
  85. System.out.println("");
  86.  
  87. int a4 = 1;//
  88. int b4 = 4;//
  89. int c4 = 8;//
  90. int d4 = 8;//
  91. System.out.println("理想结果----------------------------------");
  92. System.out.println(Integer.toBinaryString(a4));//
  93. System.out.println(Integer.toBinaryString(b4));//
  94. System.out.println(Integer.toBinaryString(c4));//
  95. System.out.println(Integer.toBinaryString(d4));//1000
  96. System.out.println("");
  97. System.out.println("1--->"+a4);
  98. System.out.println("3--->"+b4);
  99. System.out.println("5--->"+c4);
  100. System.out.println("8--->"+d4);
  101. System.out.println("");
  102.  
  103. System.out.println("测试----------------------------------");
  104. System.out.println(14>>1);//14/2=7
  105. System.out.println(7>>1);//7/2=3
  106. System.out.println(3>>1);//3/2=1
  107. System.out.println(1>>1);//1/2=0
  108. System.out.println(0>>1);//0/2=0
  109.  
  110. }
  111.  
  112. //0,4,8,14
  113. //14->8
  114. //1110->(这个数的二进制形式最左边的最高一位且高位后面全部补零,最后返回int型的结果)->1000->8
  115. //这个数的二进制形式最左边的最高一位且高位后面全部补零,最后返回int型的结果:说白了就是取离我最近的,比我小的一个2次方的值-----为什么?
  116. //2--->10
  117. //4--->100
  118. //8--->1000
  119. //16--->10000
  120. //32--->100000
  121.  
  122. public static int highestOneBit(int i) {
  123.  
  124. // HD, Figure 3-1
  125. System.out.println("右移结果");
  126. i |= (i >> 1);
  127. //>>:右移运算符,num >> 1,相当于num除以2
  128. //表示右移,如果该数为正,则高位补0,若为负数,则高位补1
  129.  
  130. System.out.println("1--->"+Integer.toBinaryString(i));
  131. i |= (i >> 2);
  132. System.out.println("2--->"+Integer.toBinaryString(i));
  133. i |= (i >> 4);
  134. System.out.println("3--->"+Integer.toBinaryString(i));
  135. i |= (i >> 8);
  136. System.out.println("4--->"+Integer.toBinaryString(i));
  137. i |= (i >> 16);
  138. System.out.println("5--->"+Integer.toBinaryString(i));
  139.  
  140. System.out.println("6--->"+Integer.toBinaryString(i >>> 1)+"(无符号右移)");
  141. //>>>:无符号右移,忽略符号位,空位都以0补齐
  142. //表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
  143. System.out.println("7--->"+Integer.toBinaryString(i - (i >>> 1))+"(减法运算)");
  144. System.out.println("");
  145.  
  146. return i - (i >>> 1);
  147. }
  148. //1,4,8,8
  149.  
  150. /*
  151. 这个函数的作用是取 i 这个数的二进制形式最左边的最高一位且高位后面全部补零,最后返回int型的结果。
  152. 1、第一步的作用是把最高位1右移移位,并与原数据按位取或。那么这就使得最高位和它的下一位是连续两个1。 2、第二步的作用是把刚刚移位得到连续两个1继续右移两位并与原数据按位取或。那么这就使得最高两位和它的下两个连续位组成四个连续的1。
  153. 3、 以此类推,最终得到的i是从开始的最高位到结束全是1。并减去i不带符号的右移一位,即可得到一个int数据的最高位的值。 4、上述情况是针对于i不为零和负数的情况,如果i为零,那么得到的结果始终为零。如果i位负数,那么得到的结果始终是-2147483648。即等于Integer.MIN_VALUE。(原因在于负数的最高位始终为1,即是负数的符号位)
  154. ---------------------
  155. 本文来自 JessenPan 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/jessenpan/article/details/9617749?utm_source=copy
  156. */
  157.  
  158. }

hashMap 临界值初步理解的更多相关文章

  1. javascript 原型及原型链的初步理解

    最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...

  2. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  3. Graph Cuts初步理解

    一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...

  4. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  5. springBoot(1)---springboot初步理解

    springboot初步理解 在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2) ...

  6. Mysql加锁过程详解(7)-初步理解MySQL的gap锁

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  7. 关于THINKPHP5模型关联的初步理解

    初步理解的意思是,使用最常用的关联模型,然后可以正常运行 还是打个比方 文章表  和文章分类表 一个文章分类可以有多个文章  所以  文章分类模型和文章建立 hasMany的关联 而文章和文章分类表则 ...

  8. spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解

    题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...

  9. Android-自定义控件-继承View与ViewGroup的初步理解

    继承View需要走的流程是: 1.构造实例化, public ChildView(Context context, @Nullable AttributeSet attrs) 2.测量自身的高和宽on ...

随机推荐

  1. 腾讯云服务器 - 配置JDK环境以及Tomcat+nginx服务器

    安装完ngxin以及fastdfs后,那么jdk和tomcat是肯定要装的,本篇很简单,实在没啥好说的,都是基础,略微带一下,如果是大牛路过可以看看吐槽一下 云服务器上初识环境如果没有选择附带其他软件 ...

  2. Unity预计算全局光照的学习(速度优化,LightProbe,LPPV)

    1.基本参数与使用 1.1 常规介绍 使用预计算光照需要在Window/Lighting面板下找到预计算光照选项,保持勾选预计算光照并保证场景中有一个光照静态的物体 此时在编辑器内构建后,预计算光照开 ...

  3. android源码编译-Mac 10.11 xcode5.1.1

    第一步: 参考官网:创建一个dmg,大小80g,这个要尽量大一点,40g感觉不够用:http://source.android.com/source/initializing.html 第二步:下载a ...

  4. Retina屏的移动设备如何实现真正1px的线

    前些日子总被人问起 iOS Retina 屏,设置 1px 边框,实际显示 2px,如何解决?原来一直没在意,源于自己根本不是像素眼……今天仔细瞅了瞅原生实现的边框和CSS设置的边框,确实差距不小…… ...

  5. 【006】【JVM——垃圾收集器总结】

     Java虚拟机学习总结文件夹 JVM--垃圾收集器总结 垃圾收集器概览 收集算法是内存回收的方法论.垃圾收集据是内存回收的详细实现.Java虚拟机规范中对垃圾收集器应该怎样实现没有规定.不同的厂 ...

  6. Eclipse 配置Maven以及修改默认Repository

    今天将Eclipse关于Maven的配置总结一下,方便以后配置. 一.配置Maven环境 1.下载apache-maven文件,选择自己需要的版本,地址:http://mirrors.cnnic.cn ...

  7. 【Acm】算法之美—Anagrams by Stack

    题目概述:Anagrams by Stack How can anagrams result from sequences of stack operations? There are two seq ...

  8. 当滚动列表的时候,让input框失去焦点(移动端会收起键盘)

    1.拓展scroll.vue事件 beforeScroll:{ type:Boolean, default:false } if(this.beforeScroll){//滚动列表的时候收起键盘(移动 ...

  9. Asp.net 从客户端中检测到有潜在危险的Request.Form值

    解决方法: 在Web.config文件里找到<httpRuntime>节点,然后修改requestValidationMode="2.0" 修改结果如下: <sy ...

  10. Eigen教程(9)

    整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html Eigen并没有为matrix提供直接的Reshape和Slicing的API,但是 ...