Jdk6:
1.初始化(源码):
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
下面是这个代号6260652中说到的bug代码示范:
List l = Arrays.asList(args);
System.out.println(l.toArray());
System.out.println(l.toArray(new Object[0]));
EXPECTED -
[Ljava.lang.Object;@10b62c9
[Ljava.lang.Object;@82ba41
ACTUAL -
[Ljava.lang.String;@10b62c9
[Ljava.lang.Object;@82ba41
[Ljava.lang.Object;@10b62c9
[Ljava.lang.Object;@82ba41
ACTUAL -
[Ljava.lang.String;@10b62c9
[Ljava.lang.Object;@82ba41
2.arrayList.toArray()内部调用的也是Arrays.copyOf
3.数组复制:
System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
4.
默认初始容量10, 扩容方法ensureCapacity(int minCapacity)是取
min{ minCapacity, (oldCapacity *3)/2+1 }
没有评论:
发表评论