Java 实现ArrayList

Java 实现ArrayList

附有详细注释,已实现泛型。
其他文章链接:Java 实现LinkedList https://blog.csdn.net/qq_39004632/article/details/103267487

类设计:

  • 主类:MyArray1
  • 自定义异常类:MyArrayIndexOutOfBoundException
  • 测试类:TestMyArray1

主类:MyArray


/**
 * 用数组模拟简易集合
 * 
 * @author BouCher
 *
 * @param <E>
 *            数据类型
 */

public class MyArray1<E> {

	private Object[] values;// 数组
	private final int LEN = 3;// 默认数组初始长度
	private int index = 0;// 默认下标

	public MyArray1() {
		// 无参构造,创建默认长度的数组
		this.values = new Object[LEN];
	}

	public MyArray1(int len) {
		// 带参构造,创建len长度的数组
		this.values = new Object[len];
	}

	/**
	 * 校验输入下标是否合法
	 * 
	 * @param index
	 *            下标
	 */
	private void checkIndex(int index) {
		if (index >= this.index || index < 0) {
			throw new MyArrayIndexOutOfBoundException("数组下标范围越界,范围是0——" + (this.index - 1));
		}
	}

	/**
	 * 数组的添加功能:将一个元素添加到数组中
	 * 
	 * @param value
	 *            插入的值
	 */
	public void add(E value) {
		// 合法性校验
		if (index >= this.values.length) {
			// 扩容
			Object[] temp = new Object[this.values.length + 1];
			for (int i = 0; i < this.values.length; i++) {
				temp[i] = this.values[i];
			}
			// 重新定向引用
			this.values = temp;
		}
		values[index++] = value;
	}

	/**
	 * 返回数组元素值
	 * 
	 * @return
	 */
	public int size() {
		return this.index;
	}

	/**
	 * 数组的查询功能:返回输入下标的元素值
	 * 
	 * @param index
	 *            输入的下标
	 * @return 对应下标的元素值
	 */
	public E get(int index) {
		// 合法性校验
		checkIndex(index);
		return (E) this.values[index];
	}

	/**
	 * 数组的删除功能:删除输入下标的元素值
	 * 
	 * @param index
	 *            输入的下标
	 * @return 对应下标的元素值
	 */
	public E remove(int index) {
		// 合法性校验
		checkIndex(index);
		// 保存返回值
		E out = (E) this.values[index];
		// 删除
		if (index == this.index - 1) {
			// 如果下标是数组最后一个元素
			this.values[index] = null;
		} else {
			// 如果下标是数组元素中间值
			for (int i = index; i < this.index - 1; i++) {
				this.values[i] = this.values[i + 1];
			}
		}
		this.index--;
		return out;
	}

	/**
	 * 数组的修改功能:修改输入下标的元素值
	 * 
	 * @param index
	 *            输入的下标
	 * @param new_value
	 *            被修改元素的新值
	 * @return 被修改元素的旧值
	 */
	public E edit(int index, E new_value) {
		// 合法性校验
		checkIndex(index);
		// 保存返回值
		E out = null;
		// 修改
		if (this.values[index] == new_value) {
			out = (E) this.values[index];
		} else {
			out = (E) this.values[index];
			this.values[index] = new_value;
		}
		return out;
	}
}

自定义异常类:MyArrayIndexOutOfBoundException


public class MyArrayIndexOutOfBoundException extends RuntimeException {

	private static final long serialVersionUID = 1L;

	public MyArrayIndexOutOfBoundException() {
		super();
	}

	public MyArrayIndexOutOfBoundException(String message) {
		super(message);
	}

}

测试类:TestMyArray1

public class TestMyArray1 {
	public static void main(String[] args) {
		MyArray1 m = new MyArray1();
		m.add("LT");
		m.add("BXX");
		m.add(123456);
		m.add(654321);
		m.add('A');
		m.add('B');

		System.out.println("-------------------------------");
		System.out.println("数组元素为:");
		for (int i = 0; i < m.size(); i++) {
			System.out.println(m.get(i));
		}

		System.out.println("-------------------------------");
		System.out.println("数组长度:" + m.size());

		System.out.println("-------------------------------");
		System.out.println("返回数组下标为3的元素:" + m.get(3));

		System.out.println("-------------------------------");
		System.out.println("返回数组下标为1的元素:" + m.remove(1));

		System.out.println("-------------------------------");
		System.out.println("修改数组下标为3的元素值为C:" + m.edit(3, 'C'));

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值