Java|学习|自定义简单集合类

public class Array {
	/**
	 * 默认容量为0,第一次添加时初始化容量为10,默认扩容倍数为1.5倍
	 */
	private Object[] elements = new Object[0];
	
	/**
	 * 已添加元素个数
	 */
	private int size = 0;
	
	/**
	 * 添加元素
	 * 
	 * @param element
	 */
	public void add(Object element){
		// 判断是否初始化过
		if (elements.length == 0) {
			elements = new Object[10];
		}
		// 这个length是容量
		int length = elements.length;
		
		// 判断是否需要扩容
		if (size == length) {
			// 此时需要扩容,扩容为1.5倍
			int newLength = length + (length >> 1);
			Object[] newArr = new Object[newLength];
			// 复制原来数组中的内容
			for (int i = 0; i < elements.length; i++) {
				newArr[i] = elements[i];
			}
			elements = newArr;
		}
		
		// 添加新的元素
		elements[size] = element;
		size++;
	}
	
	/**
	 * 根据下标删除元素
	 * 
	 * @param index
	 */
	public void remove(int index){
		// 判断传入的index是否越界,只要超出了实际的元素个数就算越界
		if (index < 0 || index >= size) {
			throw new ArrayIndexOutOfBoundsException(index);
		}
		// 删除操作
		for (int i = index; i < size - 1; i++){
			elements[i] = elements[i + 1];
		}
		// 将最后一个元素置为null,因为已经移动到前面去了
		elements[size - 1] = null;
		size--;
	}
	
	/**
	 * 根据元素内容删除,删除第一个符合条件的
	 * 
	 * @param element
	 */
	public void remove(Object element){
		// 判断是否包含这个元素并返回索引,调用方法indexOf
		int index = indexOf(element);
		if (index != -1) {
			// 调用参数为int类型的remove方法
			remove(index);
		}
	}
	
	/**
	 * 根据元素获取下标,找不到则返回-1
	 * 
	 * @param element
	 * @return
	 */
	public int indexOf(Object element){
		for (int i = 0; i < size; i++) {
			if (element.equals(elements[i])) {
				return i;
			}
		}
		return -1;
	}
	
	/**
	 * 判断是否包含某个元素
	 * 
	 * @param element
	 * @return
	 */
	public boolean contains(Object element) {
		// for (int i = 0; i < size; i++) {
		// if (elements[i].equals(element)) {
		// return true;
		// }
		// }
		int index = indexOf(element);
		return index != -1 ? true : false;
	}

	/**
	 * 修改
	 * 
	 * @param index
	 */
	public void set(int index, Object element) {
		// 1 2 3 4 5 0 0 0 0 0
		if (index <0 || index >= size) {
			throw new ArrayIndexOutOfBoundsException(index);
		}
		elements[index] = element;
	}

	/**
	 * 根据下标查询元素
	 * 
	 * @param index
	 * @return
	 */
	public Object get(int index) {
		if (index <0 || index >= size) {
			throw new ArrayIndexOutOfBoundsException(index);
		}
		return elements[index];
	}

	/**
	 * 遍历打印
	 */
	public void forEach() {
		for (int i = 0; i < size; i++) {
			System.out.println(elements[i]);
		}
	}

	/**
	 * 获取元素个数
	 * 
	 * @return
	 */
	public int size() {
		return size;
	}
}

如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤

你可能感兴趣的:(不易,Java基础知识,java,学习,开发语言)