集合初探--认识List
1. ArrayList
A) 底层数据结构

本质是一个Object数组,存放的是对象引用序列。size代表元素个数。
采用数组并通过算法保证了集合元素有序,允许重复的特性。
B) 构造方法

底层采用双向循环链表结构实现。
header:双向链表的头;Entry:包含三部分--对象数据,指向后一个Entry的引用,指向前一个Entry的引用。
B)构造方法
private void ensureCapacityHelper(int minCapacity) { int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object[] oldData = elementData; int newCapacity = (capacityIncrement > 0) ? (oldCapacity + capacityIncrement) : (oldCapacity * 2); if (newCapacity < minCapacity) { newCapacity = minCapacity; } elementData = Arrays.copyOf(elementData, newCapacity); }} 通过capacityIncrement控制:如果capacityIncrement>0,每次增加capacityIncrement。否则扩大为原来的两倍。
4.Stack
后进先出:LIFO;入栈:push(E);出栈:pop(),返回最后一个元素并删除元素;peek(),返回最后一个元素但不删除。
继承Vector,线程安全的,这使得stack也变得重量级。
stack的父类不应该为Vector的,因为Vector的底层是数组(增删效率比较低),且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。
不考虑并发,怎么实现Stack的功能?封装LinkedList也许是不错的选择。