概念

ArrayList类继承于抽象类AbstractList,实现了List接口,内部是一个可变的数组。

继承结构

list forEach索引值获取 arraylist根据索引取值_ci

因为其底层数据结构是一个数组,所以ArrayList的数据访问特性和Array相似:随机访问元素速度快,插入或者删除元素速度慢。

另外,ArrayList线程不安全,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。

构造方法

ArrayList()

public ArrayList() {
	this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
说明
  • 使用无参构造方法实例化对象时,ArrayList会构建一个默认容量为10的数组。
实例化
ArrayList<String> arrayList1 = new ArrayList<>();

ArrayList(int initialCapacity)

public ArrayList(int initialCapacity) {
    if (initialCapacity > 0) {
        this.elementData = new Object[initialCapacity];
    } else if (initialCapacity == 0) {
        this.elementData = EMPTY_ELEMENTDATA;
    } else {
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    }
}
说明
  • 传入一个int型的参数,指定ArrayList的初始数组长度,传入参数如果是大于等于0,则使用用户的参数初始化,如果用户传入的参数小于0,则抛出异常。
实例化
ArrayList<String> arrayList2 = new ArrayList<>(5);

ArrayList(Collection<? extends E> c)

public ArrayList(Collection<? extends E> c) {
    elementData = c.toArray();
    if ((size = elementData.length) != 0) {
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, size, Object[].class);
    } else {
        // replace with empty array.
        this.elementData = EMPTY_ELEMENTDATA;
    }
}
说明
  • 参数是一个集合类
  • toArray() 方法将集合转换成数组
  • 判断数组长度是否为0
  • 不为 0 则将数组的数据 copy到ArrayList内部数组
  • 为0 设置为默认数组 EMPTY_ELEMENTDATA
实例化
ArrayList<String> arrayList3 = new ArrayList<>(arrayList2);
其它

当不使用泛型指定类型时,ArrayList的Item默认类型为Object。
比如

ArrayList arrayList1 = new ArrayList();

ArrayList的常用方法

  • add(object value)
    将指定元素object value追加到集合的末尾。
  • add(int index, Object element)
    在集合中指定index位置,添加新元素obj。
  • size()
    返回列表中的元素个数。
    *get(int index)
    返回列表中指定位置的元素,index从0开始。
  • set(int i, Object element)
    将索引i位置元素替换为元素element并返回被替换的元素。
  • clear()
    从列表中移除所有元素。
  • isEmpty()
    判断列表是否包含元素,不包含元素则返回 true,否则返回false。
  • contains(Object o)
    如果列表包含指定的元素,则返回 true。
  • remove(int index)
    移除列表中指定位置的元素,并返回被删元素。
  • remove(Object o)
    移除集合中第一次出现的指定元素,移除成功返回true,否则返回false。
  • iterator()
    返回按适当顺序在列表的元素上进行迭代的迭代器,用于遍历集合。

遍历方式

for循环遍历
for(int i = 0 ; i < arrayList1.size() ; i++){
   printfln(arrayList1.get(i));
}
Iterator迭代器遍历
Iterator<String> it = arrayList1.iterator();
while (it.hasNext()){
     printfln(it.next());
}
for each循环遍历
for (String item : arrayList1){
    printfln(item);
}

demo

public class ArrayListTest {

    ArrayList<String> arrayList1 = new ArrayList<>();

    ArrayList<String> arrayList2 = new ArrayList<>(5);

    ArrayList<String> arrayList3 = new ArrayList<>(arrayList1);

    public void fun(){
        //添加item
        arrayList1.add("小绿");
        arrayList1.add("小黄");
        arrayList1.add("小红");

        //增删改以及三种遍历方式
        println("添加item“小明”:");
        arrayList1.add("小明");
        for(int i = 0 ; i < arrayList1.size() ; i++){
            print(arrayList1.get(i));
        }
        println("");

        println("小明修改成大明:");
        arrayList1.set(3,"大明");
        Iterator<String> it = arrayList1.iterator();
        while (it.hasNext()){
            print(it.next());
        }
        println("");

        println("删除大明:");
        arrayList1.remove(3);
        for (String item : arrayList1){
            print(item);
        }
        println("");
    }

    public void print(String str){
        System.out.print("["+str+"] ");
    }
    public void println(String str){
        System.out.println(str);
    }

    public static void main(String[] args){
        ArrayListTest test = new ArrayListTest();
        test.fun();
    }
}