个人不懂的API
Arrays.copyOf() 用法
Java算法中的 >>1
Math.max(DEFAULT_CAPACITY, minCapacity) 原来源码很简单:
Math:
public static int max(int a, int b) {
return (a >= b) ? a : b;
}
ArrayList 默认容量为多少:10
private static final int DEFAULT_CAPACITY = 10;
Add方法是如何处理
size 集合大小,每过来一个元素 size 都会加1
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
}
自己写了一个基础题:
public class Test1 implements Call {
static int[] list = new int[10];
static int size;
public static void main(String[] args) {
System.out.println(size++);
System.out.println(size++);
System.out.println(size++);
list[size++] = 1;
list[size++] = 2;
System.out.println(Arrays.asList(list));
}
private void ensureCapacityInternal(int minCapacity) {
ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}
// 获取容量
calculateCapacity(elementData, minCapacity)
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
//minCapacity 当前 集合大小
// elementData.length 原本的数组长度
if (minCapacity - elementData.length > 0)
// 符合条件的时候才会走
// 扩容、创建新数组
grow(minCapacity);
}
//
private void grow(int minCapacity) {
// overflow-conscious code
// 原本的数组长度
int oldCapacity = elementData.length;
// 扩容的长度 10+10/2
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
// 最大值 校验
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
// 转换为新数组
elementData = Arrays.copyOf(elementData, newCapacity);
}
持续更新~~~~~~~~