欢迎访问宙启技术站
智能推送

ArrayList类的Java函数及其实现

发布时间:2023-06-10 07:02:42

ArrayList类是Java中最常用的集合类之一,它提供了方便的动态数组实现。ArrayList封装了一个简单的动态数组,在添加或删除元素时可以自动调整数组大小。ArrayList提供了许多便于操作元素的函数,下面将介绍一些常用的函数及其实现。

1. add(Object obj)

向ArrayList中添加一个元素obj,如果该元素超出了当前ArrayList的容量,则自动扩展大小。

实现:

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // 检查是否需要扩容
    elementData[size++] = e;
    return true;
}

2. remove(int index)

删除ArrayList中指定下标的元素,并返回该元素。如果该下标不存在,则抛出IndexOutOfBoundsException异常。

实现:

public E remove(int index) {
        rangeCheck(index);  // 检查下标是否越界

        modCount++;
        E oldValue = elementData(index);  // 获取要删除的元素
        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,numMoved);

        elementData[--size] = null;  // 将最后一个元素设为空,方便垃圾回收
        return oldValue;
}

3. get(int index)

返回ArrayList中指定下标的元素。如果该下标不存在,则抛出IndexOutOfBoundsException异常。

实现:

public E get(int index) {
        rangeCheck(index);  // 检查下标是否越界

        return elementData(index);  // 返回指定下标的元素
}

4. clear()

清除ArrayList中的所有元素。

实现:

public void clear() {
        modCount++;

        for (int i = 0; i < size; i++)
            elementData[i] = null;

        size = 0;
}

5. indexOf(Object obj)

返回ArrayList中第一次出现指定元素obj的下标,如果该元素不存在,则返回-1。

实现:

public int indexOf(Object o) {
        if (o == null) {
            for (int i = 0; i < size; i++)
                if (elementData[i]==null)
                    return i;
        } else {
            for (int i = 0; i < size; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
}

6. size()

返回ArrayList中的元素个数。

实现:

public int size() {
        return size;
}

7. toArray()

返回一个包含ArrayList所有元素的数组。

实现:

public Object[] toArray() {
        return Arrays.copyOf(elementData, size);
}

8. ensureCapacity(int minCapacity)

确保ArrayList的容量不小于指定的minCapacity。

实现:

public void ensureCapacity(int minCapacity) {
        int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
            ? 0
            : DEFAULT_CAPACITY;

        if (minCapacity > minExpand) {
            ensureExplicitCapacity(minCapacity);
        }
}

ArrayList类还有许多其他函数,这里只介绍了一小部分常用的函数及其实现。所有函数的具体实现可以在Java源代码中找到。掌握这些函数的使用和实现可以帮助我们更好地使用ArrayList类。