简单实现java中ArrayList

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数组的元素设置为t
		if (index < 0 || index >= arraySize) {
			throw new ArrayIndexOutOfBoundsException();
		}
		items[index] = t;
	}

	public int size() {// 数组实际长度
		return arraySize;
	}

	public void add(T t) {// 想list添加元素t
		add(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];
		}
	}

	@Override
	public Iterator<T> iterator() {//遍历List
		return new IteratorArray();
	}

	private class IteratorArray implements Iterator<T> {

		private int current = 0;

		@Override
		public boolean hasNext() {
			return current < size();
		}

		@Override
		public T next() {
			if(!hasNext()) {
				throw new NoSuchElementException();
			}
			return items[current++];
		}

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值