ArrayList
package list;
import java.util.*;
public class MyArrayList implements List {
private Object[] elementData;
private int size;
private final static int defaultCapacity = 10;
public MyArrayList() {
this(defaultCapacity);
}
public MyArrayList(int initialCapacity) {
this.elementData = new Object[initialCapacity];
}
@Override
public int size() {
return this.size;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public boolean add(Object o) {
// 确保存储空间能够存储新的数据
ensureCapacity(size + 1);
int oldSize = this.size;
elementData[size++] = o;
if (this.size > oldSize) {
return true;
}
return false;
}
private void ensureCapacity(int minCapacity) {
if (minCapacity == elementData.length) {
int oldCapacity = elementData.length;
// 新数组长度为原数组长度的1.5倍
// oldCapacity >> 1 理解成 oldCapacity/2 新数组的长度是原来长度1.5倍
int newCapacity = oldCapacity + (oldCapacity >> 1);
// 使用传入的值和原数组1.5的最大值作为新数组的长度
newCapacity = Math.max(minCapacity, newCapacity);
// 空间不够数组扩容
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean addAll(Collection c) {
return false;
}
@Override
public boolean addAll(int index, Collection c) {
return false;
}
@Override
public void clear() {
}
@Override
public Object get(int index) {
return elementData[index];
}
@Override
public Object set(int index, Object element) {
elementData[index] = element;
return element;
}
@Override
public void add(int index, Object element) {
}
@Override
public Object remove(int index) {
System.arraycopy(elementData, index + 1, elementData, index, size - index - 1);
elementData[--size] = null;
return elementData[index];
}
@Override
public int indexOf(Object o) {
return 0;
}
@Override
public int lastIndexOf(Object o) {
return 0;
}
@Override
public ListIterator listIterator() {
return null;
}
@Override
public ListIterator listIterator(int index) {
return null;
}
@Override
public List subList(int fromIndex, int toIndex) {
return null;
}
@Override
public boolean retainAll(Collection c) {
return false;
}
@Override
public boolean removeAll(Collection c) {
return false;
}
@Override
public boolean containsAll(Collection c) {
return false;
}
@Override
public Object[] toArray(Object[] a) {
return new Object[0];
}
@Override
public String toString() {
String result = "[";
for (int i = 0; i < size; i++) {
if (i < size - 1) {
result += elementData[i] + ", ";
} else {
result += elementData[i];
}
}
result += "]";
return result;
}
}
package Test.list;
import list.MyArrayList;
import org.junit.jupiter.api.Test;
import java.util.List;
class MyArrayListTest {
@Test
public void test01() {
List list = new MyArrayList();
for (int i = 0; i < 5; i++) {
list.add(i);
}
System.out.println(list.size());
}
//5
@Test
public void test02() {
List list = new MyArrayList();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println(list.size());
}
//10
@Test
public void test03() {
List list = new MyArrayList();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println(list.size());
list.add(10);
System.out.println(list.size());
}
@Test
public void test04() {
List list = new MyArrayList();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println(list.size());
list.add(10);
System.out.println(list.size());
System.out.println(list.get(5));
}
@Test
public void test05() {
List list = new MyArrayList();
for (int i = 0; i < 10; i++) {
list.add(i);
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
@Test
public void test06() {
List list = new MyArrayList();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println(list);
}
//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
@Test
public void test07() {
List list = new MyArrayList();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println(list);
list.remove(3);
System.out.println(list);
System.out.println(list.size());
}
}