數據結構複習(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;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章