简单实现java中ArrayList

来源:互联网 发布:我知谁掌管明天 刘若英 编辑:程序博客网 时间:2024/06/14 09:55

ArrayList实现了一个可变长度数组,ArrayList这个对象包含一个数组,以及当前数组添加的元素个数,以及添加元素个数和数组长度一样的时候将原数组复制到新数组。代码如下。

package test;import java.util.Iterator;import java.util.NoSuchElementException;/** * 实现自己的ArrayList *  * @author lenovo * * @param <T> */public class MyArrayList<T> implements Iterable<T> {private static final int DEFAULT_CAPACITY = 16;// 初始化数组长度private static int arraySize;// 数组放入元素的个数private T[] items;// 内部数组存放添加对象public MyArrayList() {// 默认构造器arraySize = 0;items = (T[]) new Object[DEFAULT_CAPACITY];}public T get(int index) {// 根据下标获取元素if (index < 0 || index > arraySize) {throw new ArrayIndexOutOfBoundsException();}return items[index];}public void set(int index, T t) {// 将下标index数组的元素设置为tif (index < 0 || index >= arraySize) {throw new ArrayIndexOutOfBoundsException();}items[index] = t;}public int size() {// 数组实际长度return arraySize;}public void add(T t) {// 想list添加元素tadd(arraySize, t);}public boolean isEmpty() {// 判断list是否为空return arraySize == 0;}public void clear() {// 清空list元素arraySize = 0;enrich(DEFAULT_CAPACITY);}public void add(int index, T t) {// 向下标index添加元素,index后面的元素依次后移if (arraySize == items.length) {enrich(arraySize * 2 + 1);}for (int i = arraySize; i > index; i--) {items[i] = items[i - 1];}items[index] = t;arraySize++;}public void enrich(int newSize) {// 扩容数组System.out.println("扩容");if (newSize < arraySize) {return;}T[] old = items;items = (T[]) new Object[newSize];for (int i = 0; i < arraySize; i++) {items[i] = old[i];}}@Overridepublic Iterator<T> iterator() {//遍历Listreturn new IteratorArray();}private class IteratorArray implements Iterator<T> {private int current = 0;@Overridepublic boolean hasNext() {return current < size();}@Overridepublic T next() {if(!hasNext()) {throw new NoSuchElementException();}return items[current++];}}}


原创粉丝点击