ArrayList 方法总结

  • ArrayList继承关系
  • ArrayList常见方法
  • ArrayList全部方法简介

ArrayList继承关系

ArrayList继承了AbstractList,实现了List接口,底层实现是数组

ArrayList中的方法没有加 synchronized 关键字,线程并不安全

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{...}

ArrayList常见方法

add - 添加
// 实例arraylist
    public static ArrayList<Integer> createIntegerArray() {
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(9);
        arrayList.add(6);
        arrayList.add(4);
        arrayList.add(7);
        return arrayList;
    }

    public static ArrayList<String> createStringArray() {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("a");
        arrayList.add("bcd");
        arrayList.add("hello");
        arrayList.add("IZONKUN");
        arrayList.add("world");
        arrayList.add("a");
        return arrayList;
    }
// 源码方法:
    public boolean add(E e) {
        modCount++;
        add(e, elementData, size);
        return true;
    }
    // 简单好懂:有位置就在对应位置赋值,否则就扩容再赋值
    private void add(E e, Object[] elementData, int s) {
        if (s == elementData.length)
            // grop() 扩容方法
            elementData = grow();
        elementData[s] = e;
        size = s + 1;
    }
get - 获得所给索引对应的值
// 输入参数:int num 用于在数组中寻找对应偏移量的值
public static void main(String[] args){
    ArrayList<Integer> arrayList1 = createIntegerArray();
    System.out.println(arrayList1.get(1));
    System.out.println(arrayList1.get(100));
}
// 返回值 <E> ArrayList对应类型
9
NPE 空指针异常
// 源码方法:
    public E get(int index) {
        // 检查长度是否有异常
        Objects.checkIndex(index, size);
        return elementData(index);
    }
    // 检查长度是否有异常方法
    public static <X extends RuntimeException>
    int checkIndex(int index, int length,
                   BiFunction<String, List<Integer>, X> oobef) {
        if (index < 0 || index >= length)
            throw outOfBoundsCheckIndex(oobef, index, length);
        return index;
    }
    // 返回对应值
    E elementData(int index) {
        return (E) elementData[index];
    }
contains - 判断是否存在在对应arraylist中
// 输入参数:Object object 用于判断是否存在的对象
public static void main(String[] args){
    ArrayList<Integer> arrayList1 = createIntegerArray();
    System.out.println(arrayList1.contains(1));
    System.out.println(arrayList1.contains(100));
}
// 返回值:boolean
true   
false
// 源码方法:
    public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }
    public int indexOf(Object o) {
        return indexOfRange(o, 0, size);
    }
    int indexOfRange(Object o, int start, int end) {
        Object[] es = elementData;
        // 目标为空
        if (o == null) {
            for (int i = start; i < end; i++) {
                if (es[i] == null) {
                    return i;
                }
            }
        } else {
            // 遍历返回第一次遇到目标的下标
            for (int i = start; i < end; i++) {
                if (o.equals(es[i])) {
                    return i;
                }
            }
        }
        return -1;
    }
indexOf - 获得所给值对应的第一个索引
// 输入参数:Object object 用于判断是否存在的对象
public static void main(String[] args){
    ArrayList<String> arrayList2 = createStringArray();
    System.out.println(arrayList2.indexOf("wwww"));
    System.out.println(arrayList2.indexOf("IZONKUN"));
}
// 返回值 int 返回对应值对应的第一个索引
-1
3
// 见上面的contains中的indexOf和indexOfRange
size - 获得arraylist长度
public static void main(String[] args){
    ArrayList<String> arrayList2 = createStringArray();
    System.out.println(arrayList2.size());
}
// 返回值 int 长度
6
// 源码方法:
    public int size() {
        return size;
    }
isEmpty - 判断当前arraylist是否为空
public static void main(String[] args){
    ArrayList<String> arrayList2 = createStringArray();
    System.out.println(arrayList2.isEmpty());
}
// 返回值 boolean  为空返回true 不为空返回false
false
// 源码方法:
    public boolean isEmpty() {
        return size == 0;
    }
forEach - 遍历arraylist
// 遍历数组,进行活动
public static void main(String[] args){
    ArrayList<String> arrayList2 = createStringArray();
    arrayList2.forEach((e)-> {
        System.out.print(e+" ");
    });
}
// 返回值
a bcd hello IZONKUN world a 
// 源码方法:
    // 传入参数:消费者行为
    public void forEach(Consumer<? super E> action) {
        // 判空异常
        Objects.requireNonNull(action);
        final int expectedModCount = modCount;
        final Object[] es = elementData;
        final int size = this.size;
        for (int i = 0; modCount == expectedModCount && i < size; i++)
            // 消费者方法执行
            action.accept(elementAt(es, i));
        if (modCount != expectedModCount)
            throw new ConcurrentModificationException();
    }
    // 判空异常方法:
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }

ArrayList全部方法简介

方法 描述
add() 将元素插入到指定位置的arraylist中
addAll() 添加集合中所有元素到arraylist中
clear() 删除arraylist中所有元素
clone() 复制一份arraylist
contains() 判断元素是否在arraylist中
get() 通过索引值获取arraylist中的元素
indexOf() 返回arraylist中元素的索引值
removeAll() 删除存在于指定集合中的arraylist里的所有元素
remove() 删除arraylist里的单个元素
size() 返回arraylist里元素数量
isEmpty() 判断arraylist是否为空
subList() 截取部分arraylist的元素
set() 替换arraylist中指定索引的元素
sort() 对arraylist元素进行排序
toArray() 将arraylist转换为数组
toString() 将arraylist转换为字符串
ensureCapacity() 设置指定容量大小的arraylist
lastindexOf() 返回指定元素在arraylist中最后一次出现的位置
retainAll() 保留arraylist是否包含指定集合中的所有元素
containsAll() 查看arraylist是否包含指定集合中的所有元素
trimToSize() 将arraylist中的容量调整为数组中的元素个数
removeRange() 删除arraylist中指定索引之间存在的元素
replaceAll() 将给定的操作内容替换掉数组中每一个元素
removeIf() 删除所有满足特定条件的arraylist元素
forEach() 遍历arraylist中每一个元素并执行特定操作