试着做一个团队自己的泛型类ArrayList,主要实现以下几个功能: 1. 必须是泛型类,能装下任何指定类型的数据 2. 必须可以进行空间扩展,空间不足的时候可以通过翻倍内部数据空间的方法得到更多的空间容纳新数据 3. 可以添加数据 4. 可以删除数据 5. 可以取指定位置的数据 6. 可以获得空间中有效数据的个数 7. 可以使用for枚举空间中所有数据
时间: 2023-06-24 10:07:48 浏览: 77
1.泛型类 、通配符的使用、通配符的上限和下限 编写泛型类Stack<E>,该类中定义一个成员变量和如下方法:
5星 · 资源好评率100%
好的,下面是一个简单的实现:
``` java
public class ArrayList<T> {
private T[] array;
private int size;
private int capacity;
public ArrayList() {
capacity = 10;
array = (T[]) new Object[capacity];
size = 0;
}
public void add(T data) {
if (size == capacity) {
expand();
}
array[size++] = data;
}
public void remove(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
for (int i = index; i < size - 1; i++) {
array[i] = array[i + 1];
}
size--;
}
public T get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
return array[index];
}
public int size() {
return size;
}
public void forEach(Consumer<? super T> action) {
for (int i = 0; i < size; i++) {
action.accept(array[i]);
}
}
private void expand() {
capacity *= 2;
T[] newArray = (T[]) new Object[capacity];
System.arraycopy(array, 0, newArray, 0, size);
array = newArray;
}
}
```
这个实现使用了一个泛型数组 `array` 来存储数据,同时记录了当前已经存储的数据个数 `size` 和数组容量 `capacity`。添加数据时,如果数组已满,则通过 `expand()` 方法将数组容量翻倍。删除数据时,通过将目标位置后面的所有元素向前移动一个位置,并将 `size` 减一来实现。取指定位置的数据时,如果下标越界,则抛出 `IndexOutOfBoundsException` 异常。获得空间中有效数据的个数时,直接返回 `size`。使用 `forEach()` 方法可以遍历数组中所有的元素并对其执行指定的操作。
阅读全文