ArrayList代码学习
2024-09-01 07:07:16
ArrayList (数组链表)使用Object数组作为存储。
/**
* The array buffer into which the elements of the ArrayList are stored.
* The capacity of the ArrayList is the length of this array buffer. Any
* empty ArrayList with elementData == EMPTY_ELEMENTDATA will be expanded to
* DEFAULT_CAPACITY when the first element is added.
*/
private transient Object[] elementData; /**
* Shared empty array instance used for empty instances.
*/
private static final Object[] EMPTY_ELEMENTDATA = {};
默认构造函数为:
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
super();
this.elementData = EMPTY_ELEMENTDATA;
}
构造一个空的链表,该链表没有进行初始化,在调用其add()方法时,进行了初始化:
/**
* Appends the specified element to the end of this list.
*
* @param e element to be appended to this list
* @return <tt>true</tt> (as specified by {@link Collection#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);
} private void ensureExplicitCapacity(int minCapacity) {
modCount++; // overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
} /**
* Increases the capacity to ensure that it can hold at least the
* number of elements specified by the minimum capacity argument.
*
* @param minCapacity the desired minimum capacity
*/
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
get()方法:
/**
* Returns the element at the specified position in this list.
*
* @param index index of the element to return
* @return the element at the specified position in this list
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public E get(int index) {
rangeCheck(index); return elementData(index);
} @SuppressWarnings("unchecked")
E elementData(int index) {
return (E) elementData[index];
}
最新文章
- 【Java每日一题】20161116
- QQ授权登录
- 每日一练(写不出心得体会了!毕竟哪有那么多心得好写。然后看github上有很多不错的题目。分享一下!)
- 织梦DedeCMS子目录移动到根目录的方法
- [MVC4-基礎] 使用DataAnnotations+jQuery進行表單驗證
- Git远程使用技巧
- Mac OSX下面的博客客户端Marsedit使用
- ARCH和LGWR进程同步DG日志的区别
- pig的一些实例(我常用的语法)
- es6中的...三个点
- css td hover 选择器无效
- 《Lua程序设计》第7章 迭代器与泛型for 学习笔记
- PyQt5 笔记(02):嵌套布局
- jquery中的$().each和$.each的区别
- Ajax-08 跨域获取最新电视节目清单实例
- C++练习--实现客户机(CLIENT)类
- vue2.0中改变了数组值不能实时反映到页面
- turbolink 造成 link_to异常
- js基础的自定义属性练习
- 模仿手机qq空间头部向上滚动颜色加深