java-ArrayList源码解析.docxVIP

  • 3
  • 0
  • 约1.31万字
  • 约 16页
  • 2017-04-12 发布于四川
  • 举报
java-ArrayList源码解析

ArrayList 源码解析——动力节点javaArrayList是list接口下一个底层用数组实现的典型list类,也就是传说中的动态数组,用MSDN的说法就是array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。相对于LinkedList来说,ArrayList的特点是查询数据快,增删数据慢。ArrayList的属性及常用方法。两个私有属性privatetransient Object[] elementData;//表示存储在ArrayList内的元素privateintsize;//表示它包含元素的数量B、三种构造器//带容量大小的构造方法public ArrayList(int initialCapacity) {super();if(initialCapacity 0)thrownew IllegalArgumentException(Illegal Capacity:+initialCapacity);this.elementData = new Object[initialCapacity]; }//无参构造方法,默认大小为10public ArrayList() {super(); this.elementData = EMPTY_ELEMENTDATA;}public ArrayList(Collection? extends E c) {//调用toArray()把Collection转换成数组elementData = c.toArray();//把数组的长度赋值给ArrayList的size属性size = elementData.length;// c.toArray might (incorrectly) not return Object[] (see 6260652)if(elementData.getClass() != Object[].class)elementData = Arrays.copyOf(elementData, size, Object[].class); }第一个构造方法使用提供的initialCapacity来初始化elementDate数组的大小,第二个构造方法调用构造方法并传入参数10,也就是默认elementData数组的大小为10.第三个构造方法将提供的集合转成数组返回给elementData(返回若不是Object[]就调用Aeeays.copyOf()将其转为Object[])。C、ArrayList的动态扩容:oldcapa*1.5private static final int DEFAULT_CAPACITY = 10;以add方法为入口public boolean add(E e) {? ? ? ? ensureCapacityInternal(size + 1); ?// Increments modCount!!? ? ? ? elementData[size++] = e;? ? ? ? return true;? ? }可见,在添加元素之前,会先调用ensureCapacityInternal这个方法,那就再进到这个这个方法中去。?private void ensureCapacityInternal(int minCapacity) {? ? ? ? if (elementData == EMPTY_ELEMENTDATA) {? ? ? ? ? ? minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);? ? ? ? }? ? ? ? ensureExplicitCapacity(minCapacity);? ? }? ? ? ?首先,看看数组是否为空,如果是,就将DEFAULT_CAPACITY和minCapacity的较大的一个作为初始大小赋值给minCapacity?,DEFAULT_CAPACITY是10,minCapacity就是add方法中传入的size + 1。 如果数组不为空,就直接执行ensureExplicitCapacity方法。ensureExplicitCapacity方法的实现如下:private void ensureExplicitCapacity(int minCapacity) {? ? ? ? modCount++;? ? ? ? // overflow-conscious code? ? ? ? if (minCapacity - elementData.length 0)? ? ? ? ? ? grow(minCapacity);? ? }? ? ?在这个

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档