ArrayList
1.当创建ArrayList集合容器的时候,底层会存在一个长度为10个大 小的空数组
2.10个不够的时候,会扩充原数组1.5倍大小的新数组
3.将原数组数据,拷贝到新数组中
4.将新元素添加到新数组
集合和数组的使用选择
数组:存储的元素个数固定不变
集合:存储的元素个数经常发生变化
ArrayList<> list = new ArrayList<>() 其中<>中指定类型的容器
常见成员方法
方法名 | 说明 |
---|---|
add(E e) | 将指定的元素添加到此集合的末尾 |
add(int index,E element) | 在此集合的指定位置插入指定元素 |
get(int index) | 返回指定索引处的元素 |
size() | 返回集合的元素个数 |
remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
romove(Object o) | 删除指定的元素,返回删除是否成功 |
set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
但是,实现List
接口并非只能通过数组(即ArrayList
的实现方式)来实现,另一种LinkedList
通过“链表”也实现了List接口。在LinkedList
中,它的内部每个元素都指向下一个元素
我们来比较一下ArrayList
和LinkedList
:
ArrayList | LinkedList | |
---|---|---|
获取指定元素 | 速度很快 | 需要从头开始查找元素 |
添加元素到末尾 | 速度很快 | 速度很快 |
在指定位置添加/删除 | 需要移动元素 | 不需要移动元素 |
内存占用 | 少 | 较大 |
通常情况下,我们总是优先使用ArrayList
。