@@ -3990,7 +3990,7 @@ public class ArrayList<E> extends AbstractList<E>
39903990 }
39913991 ```
39923992
3993- 指定索引插入,在旧数组上操作:
3993+ 指定索引插入,** 在旧数组上操作** :
39943994
39953995 ```java
39963996 public void add(int index, E element) {
@@ -4663,11 +4663,11 @@ HashMap继承关系如下图所示:
46634663 HashMap(int initialCapacity)//构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap
46644664 ```
46654665
4666- * 为什么必须是2的n次幂 ?
4666+ * 为什么必须是 2 的 n 次幂 ?
46674667
4668- 向HashMap中添加元素时,需要根据key的hash值 ,确定在数组中的具体位置。HashMap为了存取高效 ,要尽量较少碰撞,把数据尽可能分配均匀,每个链表长度大致相同,实现该方法的算法就是取模,hash%length,计算机中直接求余效率不如位移运算,所以源码中使用 hash&(length-1),实际上**hash % length == hash & (length-1)的前提是length是2的n次幂 **
4668+ HashMap 中添加元素时,需要根据 key 的 hash 值 ,确定在数组中的具体位置。HashMap 为了存取高效 ,要尽量较少碰撞,把数据尽可能分配均匀,每个链表长度大致相同,实现该方法的算法就是取模,hash%length,计算机中直接求余效率不如位移运算,所以源码中使用 hash&(length-1),实际上**hash % length == hash & (length-1)的前提是 length 是 2 的n次幂 **
46694669
4670- 散列平均分布:2的n次方是1后面n个0,2的n次方 -1 是n个1 ,可以**保证散列的均匀性**,减少碰撞
4670+ 散列平均分布:2 的 n 次方是 1 后面 n 个 0,2 的 n 次方 -1 是 n 个 1 ,可以**保证散列的均匀性**,减少碰撞
46714671
46724672 ```java
46734673 例如长度为8时候,3&(8-1)=3 2&(8-1)=2 ,不同位置上,不碰撞;
@@ -4678,7 +4678,7 @@ HashMap继承关系如下图所示:
46784678
46794679 创建HashMap对象时,HashMap通过位移运算和或运算得到的肯定是2的幂次数,并且是大于那个数的最近的数字,底层采用tableSizeFor()方法
46804680
4681- 3. 默认的负载因子,默认值是0 .75
4681+ 3. 默认的负载因子,默认值是 0 .75
46824682
46834683 ```java
46844684 static final float DEFAULT_LOAD_FACTOR = 0.75f;
@@ -4691,10 +4691,10 @@ HashMap继承关系如下图所示:
46914691 static final int MAXIMUM_CAPACITY = 1 << 30;
46924692 ```
46934693
4694- 最大容量为什么是2的30次方原因 :
4694+ 最大容量为什么是 2 的 30 次方原因 :
46954695
4696- * int类型是32位整型,占4个字节
4697- * Java的原始类型里没有无符号类型,所以首位是符号位正数为0,负数为1
4696+ * int 类型是 32 位整型,占 4 个字节
4697+ * Java 的原始类型里没有无符号类型,所以首位是符号位正数为 0,负数为 1
46984698
469946995. 当链表的值超过8则会转红黑树(1.8新增**)
47004700
@@ -4703,9 +4703,9 @@ HashMap继承关系如下图所示:
47034703 static final int TREEIFY_THRESHOLD = 8;
47044704 ```
47054705
4706- 为什么Map桶中节点个数大于8才转为红黑树 ?
4706+ 为什么 Map 桶中节点个数大于8才转为红黑树 ?
47074707
4708- * 在HashMap中有一段注释说明 :**空间和时间的权衡**
4708+ * 在 HashMap 中有一段注释说明 :**空间和时间的权衡**
47094709
47104710 ```java
47114711 TreeNodes占用空间大约是普通节点的两倍,所以我们只在箱子包含足够的节点时才使用树节点。当节点变少(由于删除或调整大小)时,就会被转换回普通的桶。在使用分布良好的用户hashcode时,很少使用树箱。理想情况下,在随机哈希码下,箱子中节点的频率服从"泊松分布",默认调整阈值为0.75,平均参数约为0.5,尽管由于调整粒度的差异很大。忽略方差,列表大小k的预期出现次数是(exp(-0.5)*pow(0.5, k)/factorial(k))
@@ -4723,18 +4723,16 @@ HashMap继承关系如下图所示:
47234723 ```
47244724
47254725 * 其他说法
4726- 红黑树的平均查找长度是log (n),如果长度为8,平均查找长度为log (8)=3,链表的平均查找长度为n /2,当长度为8时,平均查找长度为8 /2=4,这才有转换成树的必要;链表长度如果是小于等于6 ,6/2=3,而log (6)=2.6,虽然速度也很快的,但转化为树结构和生成树的时间并不短
4726+ 红黑树的平均查找长度是 log (n),如果长度为 8,平均查找长度为 log (8)=3,链表的平均查找长度为 n /2,当长度为 8 时,平均查找长度为 8 /2=4,这才有转换成树的必要;链表长度如果是小于等于 6 ,6/2=3,而 log (6)=2.6,虽然速度也很快的,但转化为树结构和生成树的时间并不短
47274727
4728-
4729-
4730- 6. 当链表的值小于6则会从红黑树转回链表
4728+ 6. 当链表的值小 于6 则会从红黑树转回链表
47314729
47324730 ```java
47334731 //当桶(bucket)上的结点数小于这个值时树转链表
47344732 static final int UNTREEIFY_THRESHOLD = 6;
47354733 ```
47364734
4737- 7. 当Map里面的数量 **大于等于**这个阈值时,表中的桶才能进行树形化 ,否则桶内元素太多时会扩容,而不是树形化。为了避免进行扩容、树形化选择的冲突,这个值不能小于 4 * TREEIFY_THRESHOLD (8)
4735+ 7. 当 Map 里面的数量 **大于等于**这个阈值时,表中的桶才能进行树形化 ,否则桶内元素太多时会扩容,而不是树形化。为了避免进行扩容、树形化选择的冲突,这个值不能小于 4 * TREEIFY_THRESHOLD (8)
47384736
47394737 ```java
47404738 //桶中结构转化为红黑树对应的数组长度最小的值
@@ -12373,7 +12371,7 @@ Java 语言:跨平台的语言(write once ,run anywhere)
1237312371
1237412372#### 语言发展
1237512373
12376- 机器码:各种用二进制编码方式表示的指令,与CPU紧密相关,所以不同种类的CPU对应的机器指令不同
12374+ 机器码:各种用二进制编码方式表示的指令,与 CPU 紧密相关,所以不同种类的 CPU 对应的机器指令不同
1237712375
1237812376指令:指令就是把机器码中特定的0和1序列,简化成对应的指令,例如mov,inc等,可读性稍好,但是不同的硬件平台的同一种指令(比如mov),对应的机器码也可能不同
1237912377
0 commit comments