Stack源码分析
Stack底层是数组实现是顺序栈,底层也支持扩容
首先写一段入栈和出栈的程序
public class JdkStack {
public static void main(String[] args) {
//创建栈对象
Stack stack = new Stack();
//数据入栈
stack.push("test1");
stack.push("test2");
//数据出栈
Object item =stack.pop();
System.out.println(item);
}
}
先进入push方法
public E push(E item) {
addElement(item);
return item;
}
进入addElement方法中
public synchronized void addElement(E obj) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = obj;
}
进入ensureCapacityHelper方法中,这个方法要存的元素数量要是超过栈的容量的话,就会扩容,这个跟数组那个是类似的
private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
扩容方法grow ,扩容是按照原始容量的2倍进行的,例如原始容量是4 ,扩容后就是8
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}