package com.collectionDemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
/**
* ArrayList的使用
* 存储结构:数组、查找遍历速度快、增删慢
* 源码分析:
* (1) 默认容量大小 DEFAULT_CAPACITY = 10
* 注意:如果没有向集合中添加任何元素,容量为0
* (2) elementData 用来存放元素的数组
* (3) size 实际的元素个数
* (4) add 添加元素
* public boolean add(E e) {
* ensureCapacityInternal(size + 1); // Increments modCount!!
* elementData[size++] = e;
* return true;
* }
* private static int calculateCapacity(Object[] elementData, int minCapacity) {
* if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
* return Math.max(DEFAULT_CAPACITY, minCapacity);
* }
* return minCapacity;
* }
* 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);
* }
* (5) 创建集合时 默认的容量是0 添加了第一个元素后是10 往后再扩容 每次的扩容是原来的1.5倍
* */
public class ArrayListDemo01 {
public static void main(String[] args) {
ArrayList ar1 = new ArrayList();
Student s1 = new Student("刘德华", 20);
Student s2 = new Student("郭富城", 22);
Student s3 = new Student("彭于晏", 15);
Student s4 = new Student("张梓康", 17);
// 1. 添加元素
ar1.add(s1);
ar1.add(s2);
ar1.add(s3);
ar1.add(s4);
ar1.add(s4);
System.out.println("元素个数:"+ ar1.size());
System.out.println(ar1);
System.out.println("===================================================");
// 2. 删除元素
// 通过下表
// ar1.remove(0);
// 通过元素 假如有两个相同的元素 remove只会删除前一个
ar1.remove(s4);
// 重写equals 方法 则可以使用构造的形式来删除数组元素
// ar1.remove(new Student("张梓康", 17));
System.out.println("元素个数:"+ar1.size());
System.out.println(ar1);
System.out.println("===================================================");
// 3. 遍历元素【重点】
// 3.1 迭代器
Iterator it = ar1.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
System.out.println("===================================================");
// 3.2 列表迭代器
ListIterator lit = ar1.listIterator();
while(lit.hasNext()){
System.out.println(lit.next());
}
System.out.println("===================================================");
while (lit.hasPrevious()){
System.out.println(lit.previous());
}
System.out.println("===================================================");
// 4. 判断元素
System.out.println(ar1.contains(new Student("张梓康", 17)));
System.out.println(ar1.isEmpty());
// 5. 查找元素
System.out.println(ar1.indexOf(new Student("张梓康", 17)));
}
}