以下是Java ArrayList的简化版本源代码分析:
public class ArrayList<E> { private static final int DEFAULT_CAPACITY = 10; private Object[] elements; private int size; public ArrayList() { this.elements = new Object[DEFAULT_CAPACITY]; this.size = 0; } public void add(E element) { if (size == elements.length) { increaseCapacity(); } elements[size] = element; size++; } public E get(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); } return (E) elements[index]; } public void remove(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); } for (int i = index; i < size - 1; i++) { elements[i] = elements[i + 1]; } elements[size - 1] = null; size--; } public int size() { return size; } private void increaseCapacity() { int newCapacity = elements.length * 2; Object[] newElements = new Object[newCapacity]; for (int i = 0; i < size; i++) { newElements[i] = elements[i]; } elements = newElements; } }
以上代码是一个简化版本的ArrayList实现。它使用一个数组来存储元素,并根据需要动态调整数组的容量。下面是对代码的一些关键解释:
DEFAULT_CAPACITY
elements
size
ArrayList()
add(E element)
increaseCapacity()
get(int index)
IndexOutOfBoundsException
remove(int index)
size()
请注意,这只是一个简化版本的ArrayList实现,实际的Java ArrayList源代码要更为复杂,包含了更多功能和优化。此处的代码只是为了演示ArrayList的基本原理和核心操作。
好的,接下来我们继续分析Java ArrayList的源代码。
以下是Java ArrayList类中的一些其他方法:
public class ArrayList<E> { // ... public void clear() { for (int i = 0; i < size; i++) { elements[i] = null; } size = 0; } public boolean isEmpty() { return size == 0; } public boolean contains(E element) { return indexOf(element) >= 0; } public int indexOf(E element) { if (element == null) { for (int i = 0; i < size; i++) { if (elements[i] == null) { return i; } } } else { for (int i = 0; i < size; i++) { if (element.equals(elements[i])) { return i; } } } return -1; } public void set(int index, E element) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); } elements[index] = element; } public void add(int index, E element) { if (index < 0 || index > size) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); } if (size == elements.length) { increaseCapacity(); } for (int i = size; i > index; i--) { elements[i] = elements[i - 1]; } elements[index] = element; size++; } // ... }
这些方法提供了ArrayList的一些常见功能:
clear()
isEmpty()
contains(E element)
indexOf(element)
indexOf(E element)
equals()
set(int index, E element)
add(int index, E element)
这些方法进一步丰富了ArrayList的功能,使其可以进行元素查找、插入、替换等操作。
请注意,这里的源代码仍然是一个简化版本,实际的Java ArrayList源代码中还有更多的方法和实现细节。但是以上提供的代码足以理解ArrayList的基本实现和核心功能。
原文链接:codingdict.net