数据结构复习(1)---数组线性表 MyArrayList

根据ArrayList<>提供的方法名,去实现一遍其内部逻辑

目前已实现方法如下:

package cjy.datastructure;

import java.util.Arrays;

/**
 * 线性表常用操作 Title: MyArrayList.java
 * 
 * 后面需改泛型以支持其他数据类型 都用Object
 * 
 * @author CJY》10258
 * @date 2019年7月9日
 */
public class MyArrayList {
	/**
	 * 空数组
	 */
	private int[] elements;

	public MyArrayList() {
		elements = new int[0];
	}

	/**
	 * 在表尾添加元素
	 * 
	 * @param e
	 */
	public void add(int e) {
		int[] array = new int[elements.length + 1];
		for (int i = 0; i < elements.length; i++) {
			array[i] = elements[i];
		}
		array[elements.length] = e;
		elements = array;
	}

	/**
	 * 在指定位置插入一段数据
	 * 
	 * @param index
	 * @param list
	 */
	public void addAll(int index, MyArrayList list) {
		if (index > elements.length - 1 || index < 0) {
			throw new RuntimeException("数组下标越界");
		}
		int[] array = new int[elements.length + list.size()];
		for (int i = 0; i < elements.length; i++) {
			// 位置前面部分直接移,后面部分往后移一位
			if (i < index) {
				array[i] = elements[i];
			} else {
				array[i + list.size()] = elements[i];
			}
		}
		for (int i = 0; i < list.size(); i++) {
			array[index + i] = list.get(i);
		}
		elements = array;
	}

	/**
	 * 指定位置添加元素
	 * 
	 * @param index
	 * @param element
	 */
	public void add(int index, int element) {
		if (index > elements.length - 1 || index < 0) {
			throw new RuntimeException("数组下标越界");
		}
		int[] array = new int[elements.length + 1];
		for (int i = 0; i < elements.length; i++) {
			// 位置前面部分直接移,后面部分往后移一位
			if (i < index) {
				array[i] = elements[i];
			} else {
				array[i + 1] = elements[i];
			}
		}
		array[index] = element;
		elements = array;
	}

	/**
	 * 删除指定位置元素
	 * 
	 * @param index
	 */
	public void remove(int index) {
		if (index > elements.length - 1 || index < 0) {
			throw new RuntimeException("数组下标越界");
		}
		int[] array = new int[elements.length - 1];
		for (int i = 0; i < array.length; i++) {
			// 位置前面部分直接移,后面部分往前移一位
			if (i < index) {
				array[i] = elements[i];
			} else {
				array[i] = elements[i + 1];
			}
		}

		elements = array;
	}

	/**
	 * 获取当前位置(下标)的元素
	 * 
	 * @param index
	 * @return
	 */
	public int get(int index) {
		if (index > elements.length - 1 || index < 0) {
			throw new RuntimeException("数组下标越界");
		}
		return elements[index];
	}

	/**
	 * 输出表元素到控制台
	 */
	public void show() {
		System.out.println(Arrays.toString(elements));
	}

	/**
	 * 线性表大小
	 * 
	 * @return
	 */
	public int size() {
		return elements.length;
	}

	/**
	 * 在指定位置更新元素
	 * 
	 * @param index
	 * @param e
	 */
	public void set(int index, int e) {
		if (index > elements.length - 1 || index < 0) {
			throw new RuntimeException("数组下标越界");
		}
		elements[index] = e;
	}

	/**
	 * 没有元素则返回true
	 * 
	 * @return true or false
	 */
	public Boolean isEmpty() {
		return elements.length <= 0 ? true : false;
	}

	/**
	 * 截取部分列表从 fromIndex 到 toIndex 的前一个元素 如果这两位置相等则返回 null list
	 * 
	 * @param fromIndex
	 * @param toIndex
	 * @return
	 */
	public MyArrayList subList(int fromIndex, int toIndex) {
		if (fromIndex > toIndex) {
			throw new IllegalArgumentException("fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")");
		}
		if (fromIndex > elements.length - 1 || fromIndex < 0 || toIndex > elements.length - 1 || toIndex < 0) {
			throw new RuntimeException("数组下标越界");
		}
		MyArrayList list = new MyArrayList();
		int[] array = new int[toIndex - fromIndex];
		for (int i = 0; i < array.length; i++) {
			list.add(elements[fromIndex + i]);
		}
		return list;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_41367523/article/details/95235941
今日推荐