java数据结构——ArrayList(线性表)

自定义ArrayList实现
本文介绍了一个自定义的ArrayList类的实现细节,包括基本属性、构造方法、添加元素、检查元素是否存在、获取和设置指定位置元素、判断列表是否为空、删除元素等核心功能,并通过具体的源码解析帮助读者理解其工作原理。

public class ArrayList<E>  {

	private static final int DEFAULT_CAPACITY = 10;

	private int size;
	private E [ ] items;

	@SuppressWarnings("unchecked")
	public ArrayList() {  
		size = 0; 
		items = (E[]) new Object[ DEFAULT_CAPACITY ];  
	}  

	@SuppressWarnings("unchecked")
	public boolean add(E e) {

		if (size() == items.length) {
			E [ ] newItems = (E[]) new Object[ items.length * 2 ];
			System.arraycopy(items, 0, newItems, 0, items.length);
			items = newItems;
		}

		add( size(), e );
		return true;
	}

	public void add(int index, E element) {

		rangeCheckForAdd(index);

		for ( int i = size; i > index; i-- ) {
			items[ i ] = items[ i - 1 ];
		}

		items[ index ] = element;
		size ++;
	}

	public boolean contains(Object o) {

		if ( isEmpty() ) {
			return false;
		}

		for ( int i = 0; i < size(); i++) {

			if ( items[ i ].equals(o) ) {
				return true;
			}
		}

		return false;
	}

	public E get(int index) {

		rangeCheck(index);

		return items[ index ];
	}

	public E set(int index, E element) {

		rangeCheck(index);

		E old = items[ index ];
		items[ index ] = element;

		return old;
	}

	public boolean isEmpty() {
		return size() == 0;
	}

	public E remove(int index) {
		rangeCheck(index);

		E oldItem = items[ index ];

		for (int i = index; i < size(); i++) {

			items[ i ] = items[ i + 1 ];
		}

		size --;

		return oldItem;
	}

	public boolean remove(Object o) {

		if ( isEmpty() ) {
			return false;
		}

		for ( int i = 0; i < size(); i++) {

			if ( items[ i ].equals(o) ) {
				return remove( i ) != null;
			}
		}

		return false;
	}

	public int size() {
		return size;
	}

	@Override
	public String toString() {

		StringBuffer sb = new StringBuffer();
		sb.append("[");

		return super.toString();
	}

	private void rangeCheck(int index) {
		if (index >= size)
			throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
	}

	private void rangeCheckForAdd(int index) {
		if (index > size || index < 0)
			throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
	}

	private String outOfBoundsMsg(int index) {
		return "Index: "+index+", Size: "+size;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值