Skip to content

Commit ea96275

Browse files
committed
Update Java Notes
1 parent 620eb2d commit ea96275

2 files changed

Lines changed: 146 additions & 202 deletions

File tree

Java.md

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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
185185
char Character(特殊)
186186
boolean 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;
301313
System.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;
305317
System.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

54335433
TreeSet 集合的底层是基于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

Comments
 (0)