赞
踩
import java.util.Arrays; import java.util.Objects; public class MyArrayList<E> { private Object[] elementData ; // 存储元素的数组 private int size; // 记录 的元素个数 private static final int DEFAULT_CAPACITY = 10; // 默认容量 // 添加元素 public boolean add(E e) { // 1.判断是否需要扩容 if (Objects.isNull(elementData) || size == elementData.length ) { grow(); } // 2.添加元素 elementData[size++] = e; return true; } // 获取元素 public E get(int index) { // 判断index是否合法 checkIndex(index); return (E) elementData[index]; } // 删除元素 public E remove(int index) { // 1.判断index是否合法 checkIndex(index); // 2.获取要删除的元素 E oldValue = (E) elementData[index]; // 3.计算要移动的元素个数 int moveSize = size - index - 1; // 4.移动元素 if (moveSize > 0) { // 从index+1开始移动 moveSize个元素到index位置 System.arraycopy(elementData,index + 1,elementData,index,moveSize); } // 5.将最后一个元素置为null elementData[--size] = null; return oldValue; } // 遍历 public void forEach(MyConsumer<E> action) { Objects.requireNonNull(action); for (int i = 0; i < size; i++) { action.accept((E) elementData[i]); } } // 扩容 private void grow() { // 1.判断原来的容量是不是为0 如果为0 则新建一个长度为10的数组 if (size == 0){ elementData = new Object[DEFAULT_CAPACITY]; } else { // 1.5倍扩容复制原来的数组到新数组 elementData = Arrays.copyOf(elementData,size + (size >> 1)); } } // 判断index是否合法 private void checkIndex(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("索引不合法"); } } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < size; i++) { sb.append(elementData[i]); if (i < size - 1) { sb.append(","); } } sb.append("]"); sb.append("size = ").append(size); sb.append(" capacity = ").append(elementData.length); return sb.toString(); } }
@FunctionalInterface
public interface MyConsumer<E> {
void accept(E e);
}
// 测试添加元素 MyArrayList<String> list = new MyArrayList<>(); list.add("张无忌"); list.add("赵敏"); list.add("周芷若"); list.add("小昭"); list.add("殷素素"); list.add("张三丰"); list.add("张翠山"); list.add("张无忌"); list.add("赵敏"); list.add("周芷若"); list.add("小昭"); System.out.println("list = " + list); // 测试获取元素 list.remove(0); list.remove(99); System.out.println("list = " + list); // 测试遍历 list.forEach(System.out::println);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。