mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-20 22:17:09 +08:00
Merge pull request #1211 from drlifeL/master
Update ArrayList源码+扩容机制分析.md
This commit is contained in:
commit
cbcf184210
@ -733,6 +733,24 @@ public class ArrayList<E> extends AbstractList<E>
|
||||
|
||||
#### 3.3.1. `System.arraycopy()` 方法
|
||||
|
||||
源码:
|
||||
|
||||
```java
|
||||
// 我们发现 arraycopy 是一个 native 方法,接下来我们解释一下各个参数的具体意义
|
||||
/**
|
||||
* 复制数组
|
||||
* @param src 源数组
|
||||
* @param srcPos 源数组中的起始位置
|
||||
* @param dest 目标数组
|
||||
* @param destPos 目标数组中的起始位置
|
||||
* @param length 要复制的数组元素的数量
|
||||
*/
|
||||
public static native void arraycopy(Object src, int srcPos,
|
||||
Object dest, int destPos,
|
||||
int length);
|
||||
```
|
||||
|
||||
场景:
|
||||
```java
|
||||
/**
|
||||
* 在此列表中的指定位置插入指定的元素。
|
||||
@ -781,6 +799,21 @@ public class ArraycopyTest {
|
||||
|
||||
#### 3.3.2. `Arrays.copyOf()`方法
|
||||
|
||||
源码:
|
||||
|
||||
```java
|
||||
public static int[] copyOf(int[] original, int newLength) {
|
||||
// 申请一个新的数组
|
||||
int[] copy = new int[newLength];
|
||||
// 调用System.arraycopy,将源数组中的数据进行拷贝,并返回新的数组
|
||||
System.arraycopy(original, 0, copy, 0,
|
||||
Math.min(original.length, newLength));
|
||||
return copy;
|
||||
}
|
||||
```
|
||||
|
||||
场景:
|
||||
|
||||
```java
|
||||
/**
|
||||
以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。
|
||||
|
@ -907,7 +907,7 @@ AtomicInteger 类主要利用 CAS (compare and swap) + volatile 和 native 方
|
||||
|
||||
CAS 的原理是拿期望的值和原本的一个值作比较,如果相同则更新成新的值。UnSafe 类的 objectFieldOffset() 方法是一个本地方法,这个方法是用来拿到“原来的值”的内存地址,返回值是 valueOffset。另外 value 是一个 volatile 变量,在内存中可见,因此 JVM 可以保证任何时刻任何线程总能拿到该变量的最新值。
|
||||
|
||||
关于 Atomic 原子类这部分更多内容可以查看我的这篇文章:并发编程面试必备:[JUC 中的 Atomic 原子类总结](https://mp.weixin.qq.com/s/joa-yOiTrYF67bElj8xqvg)
|
||||
关于 Atomic 原子类这部分更多内容可以查看我的这篇文章:并发编程面试必备:[JUC 中的 Atomic 原子类总结](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484834&idx=1&sn=7d3835091af8125c13fc6db765f4c5bd&source=41#wechat_redirect)
|
||||
|
||||
## 6. AQS
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user