读书人

聚合初探-认识List

发布时间: 2012-12-22 12:05:06 作者: rapoo

集合初探--认识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也许是不错的选择。

读书人网 >编程

热点推荐