@@ -169,8 +169,8 @@ G-->H[double]
169169
170170包装类的作用:
171171
172- * 包装类作为类首先拥有了Object类的方法。
173- * 包装类作为引用类型的变量可以存储null值。
172+ * 包装类作为类首先拥有了 Object 类的方法
173+ * 包装类作为引用类型的变量可以**存储 null 值**
174174
175175
176176```java
@@ -185,12 +185,12 @@ double Double
185185char Character(特殊)
186186boolean Boolean
187187```
188- Java为包装类做了一些特殊功能 ,具体来看特殊功能主要有:
188+ Java 为包装类做了一些特殊功能 ,具体来看特殊功能主要有:
189189
190190* 可以把基本数据类型的值转换成字符串类型的值
191- 1. 调用toString() 方法
192- 2. 调用Integer .toString(基本数据类型的值)得到字符串
193- 3. 直接把基本数据类型+ 空字符串就得到了字符串(推荐使用)
191+ 1. 调用 toString() 方法
192+ 2. 调用 Integer .toString(基本数据类型的值) 得到字符串
193+ 3. 直接把基本数据类型 + 空字符串就得到了字符串(推荐使用)
194194
195195* 把字符串类型的数值转换成对应的基本数据类型的值(**重要**)
196196
@@ -259,6 +259,18 @@ public class PackegeClass {
259259}
260260```
261261
262+ **自动装箱**反编译后底层调用 `Integer.valueOf()` 实现,源码:
263+
264+ ```java
265+ public static Integer valueOf(int i) {
266+ if (i >= IntegerCache.low && i <= IntegerCache.high)
267+ return IntegerCache.cache[i + (-IntegerCache.low)];
268+ return new Integer(i);
269+ }
270+ ```
271+
272+
273+
262274
263275
264276***
@@ -296,28 +308,16 @@ valueOf() 方法的实现比较简单,就是先判断值是否在缓存池中
296308在 jdk 1.8 所有的数值类缓冲池中,Integer 的缓存池 IntegerCache 很特殊,这个缓冲池的下界是 -128,上界默认是 127,但是上界是可调的,在启动 jvm 的时候,通过 AutoBoxCacheMax=<size> 来指定这个缓冲池的大小,该选项在 JVM 初始化的时候会设定一个名为 java.lang.IntegerCache.high 系统属性,然后 IntegerCache 初始化的时候就会读取该系统属性来决定上界
297309
298310```java
299- Integer x = Integer.valueOf(100);
300- Integer y = Integer.valueOf( 100) ;
311+ Integer x = 100; //自动装箱,底层调用 Integer.valueOf(1)
312+ Integer y = 100;
301313System.out.println(x == y); // true
302314
303- Integer x = Integer.valueOf( 1000) ;
304- Integer y = Integer.valueOf( 1000) ;
315+ Integer x = 1000;
316+ Integer y = 1000;
305317System.out.println(x == y); // false
306318//因为缓存池最大127
307319```
308320
309- 反编译后底层调用 `Integer.valueOf()` 实现自动装箱,源码:
310-
311- ```java
312- public static Integer valueOf(int i) {
313- if (i >= IntegerCache.low && i <= IntegerCache.high)
314- return IntegerCache.cache[i + (-IntegerCache.low)];
315- return new Integer(i);
316- }
317- ```
318-
319-
320-
321321
322322
323323***
@@ -4390,7 +4390,7 @@ PriorityQueue 是优先级队列,底层存储结构为 Object[],默认实现
43904390
43914391* `public PriorityQueue()`:构造默认长度为 11 的队列(数组)
43924392
4393- * `public PriorityQueue(Comparator<? super E> comparator)`:带比较器实现,可以自定义堆排序的规则
4393+ * `public PriorityQueue(Comparator<? super E> comparator)`:利用比较器自定义堆排序的规则
43944394
43954395 ```java
43964396 Queue<Integer> pq = new PriorityQueue<>((v1, v2) -> v2 - v1);//实现大顶堆
@@ -5428,18 +5428,18 @@ class LRUCache<K, V> extends LinkedHashMap<K, V> {
54285428
54295429#### TreeMap
54305430
5431- TreeMap 实现了 SotredMap 接口,是有序不可重复的键值对集合,基于红黑树(Red-Black tree)实现,每个 key-value 都作为一个红黑树的节点。如果构造 TreeMap 没有指定比较器,则根据key执行自然排序 (默认升序),如果指定了比较器则按照比较器来进行排序
5431+ TreeMap 实现了 SotredMap 接口,是有序不可重复的键值对集合,基于红黑树(Red-Black tree)实现,每个 key-value 都作为一个红黑树的节点。如果构造 TreeMap 没有指定比较器,则根据 key 执行自然排序 (默认升序),如果指定了比较器则按照比较器来进行排序
54325432
54335433TreeSet 集合的底层是基于TreeMap,只是键的附属值为空对象而已
54345434
5435- TreeMap集合指定大小规则有2种方式 :
5435+ TreeMap 集合指定大小规则有 2 种方式 :
54365436
5437- * 直接为对象的类实现比较器规则接口Comparable ,重写比较方法(拓展方式)
5438- * 直接为集合设置比较器Comparator对象 ,重写比较方法
5437+ * 直接为对象的类实现比较器规则接口 Comparable ,重写比较方法(拓展方式)
5438+ * 直接为集合设置比较器 Comparator 对象 ,重写比较方法
54395439
54405440成员属性:
54415441
5442- * Entry节点
5442+ * Entry 节点
54435443
54445444 ```java
54455445 static final class Entry<K,V> implements Map.Entry<K,V> {
@@ -5457,7 +5457,7 @@ TreeMap集合指定大小规则有2种方式:
54575457 ```java
54585458 //如果comparator为null,采用comparable.compartTo进行比较,否则采用指定比较器比较大小
54595459 final int compare(Object k1, Object k2) {
5460- return comparator== null ? ((Comparable<? super K>)k1).compareTo((K)k2)
5460+ return comparator == null ? ((Comparable<? super K>)k1).compareTo((K)k2)
54615461 : comparator.compare((K)k1, (K)k2);
54625462 }
54635463 ```
0 commit comments