MyArryList

MyArrayList

ArrayList自定义实现


import java.util.Arrays;

public class MyArrayList<E> {
//	增	 删 	改 	查
//	定义数组
	private E[] data;
//	数组大小
	private int size;

//	抑制编译器警告
	@SuppressWarnings("unchecked")
//	构造一个有参参数
	public MyArrayList(int capacity) {
		/*
		 * // 判断输入的是否有值 if (capacity <= 0) { // 小于0或大于0将本身的值赋给数组的长度 data = new
		 * int[this.capacity]; } else { // 将输入的值作为数组的长度 data = new int[capacity]; }
		 */
//		判断输入的值是不是0或0以下
		if (capacity <= 0) {
//			小于等于0赋值长度为5
			data = (E[]) new Object[5];

		} else {
//			将赋值的数给予data为长度
			data = (E[]) new Object[capacity];

		}

//		设置数为0
		this.size = 0;

	}

//	构造一个无参参数
	public MyArrayList() {
//		默认长度为10
		this(10);
	}

//	增加数
	public void insert(int index, E e) {
//		调取抛出异常
		castAbnormal(index);
//		将所有的值向后移一位
		for (int i = size - 1; i >= index; i--) {
//			data[i]的值给予data[i + 1]
			data[i + 1] = data[i];

		}
//		将加入的值赋给data[index]
		data[index] = e;
//		数的长度加1
		size++;
//		判断数的个数是否与数组长度相同
		if (size == data.length) {
//			扩容
			resize();

		}

	}

//	在第一个位置增加
	public void addFirst(E e) {
//		调用增加从0开始
		insert(0, e);
	}

//	在最后增加
	public void addLast(E e) {
//		调用增加从size开始
		insert(size, e);
	}

//	删除
	public void remove(int index) {
//		调取抛出异常
		castAbnormal(index);
//		从索引开始计算增加
		for (int i = index; i <= size; i++) {
//			将后面一个数赋给前面一个数
			data[i] = data[i + 1];

		}
//		数的长度减一
		size--;
//		如果数的长度小于数组长度的一半-1
		if (size == data.length / 2 - 1) {
//			进行缩容
			delResize();

		}

	}

//	删除第一个数
	public void removeFirst() {
//		赋值下标0
		remove(0);

	}

//	删除最后一个
	public void removeLast() {
//		赋值下标最大的数
		remove(size);

	}

//	修改
	public void set(int index, E e) {
//		调取抛出异常
		castAbnormal(index);
//		将索引的值替换为e
		data[index] = e;

	}

//	查询
	public E get(int index) {
//		将查询的值赋给price
		E price = data[index];
//		将price作为返回值进行返回
		return price;

	}

//	获取数的多少
	public int setSize() {
//		返回数的长度
		return size;

	}

//	获取数组长度
	public int setCapacity() {
//		返回数组的长度
		return data.length;

	}

//	判断是空
	public boolean isEmpty() {
//		返回数长度等于0的一个判断
		return size == 0;

	}

//	包含
	public boolean contains(E e) {
//		循环所有的数
		for (int i = 0; i < size; i++) {
//			判断数的值与查找的值是否相等
			if (data[i] == e) {
//				找到返回true
				return true;

			}

		}
//		没有找到返回false
		return false;

	}

//	角标索引
	public int getIndex(E e) {

//		循环所有的数
		for (int i = 0; i < size; i++) {
//			判断数的值与查找的值是否相等
			if (data[i] == e) {
//				找到返回索引
				return i;

			}

		}
//		没有找到返回 -1
		return -1;

	}

//	抛出异常
	private void castAbnormal(int index) {
//		判断输入的值在不在范围
		if (index < 0 || index > size) {
//			不在范围报异常
			throw new IllegalArgumentException("数据异常");
		}

	}

//	扩容
	public void resize() {
//		抑制编译器警告
		@SuppressWarnings("unchecked")
//		建一个新的数组newData,数组长度是data数组长度发的2倍
		E[] newData = (E[]) new Object[2 * data.length];
//		循环data数组的长度
		for (int i = 0; i < data.length; i++) {
//			将数组data中的值赋给newData
			newData[i] = data[i];
		}
//		newDatad赋予data
		data = newData;

	}

//	消容
	public void delResize() {
//		抑制编译器警告
		@SuppressWarnings("unchecked")
//		建一个新的数组newData,数组长度是data数组长度发的二分之一倍
		E[] newData = (E[]) new Object[data.length / 2];
//		循环newData数组的长度
		for (int i = 0; i < newData.length; i++) {
//			将数组data中的值赋给newData
			newData[i] = data[i];

		}
//		newDatad赋予data
		data = newData;

	}

	@Override
	public String toString() {
		return "MyArrayList [data=" + Arrays.toString(data) + "]";
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值