《Java数据结构与算法》笔记CH2无序数组

/**
 * 本章目标:
 * 		1.自制数组类 
 * 		2.有序数组:按关键字升降序排列;二分法查找
 * 		3.分析有序数组。大O表示法 
 */
/**
 * 自制数组类 书中有的地方有错误,本程序以修改
 */
class HighArray {
	private long[] a;
	private int nElements;// 维护array的实际元素个数

	public HighArray(int size) {
		a = new long[size];
		nElements = 0;// 初始化的时候个数设为0
	}

	/**
	 * toString()把数组转为字符串,方便打印
	 */
	public String toString() {
		if (nElements == 0)
			return "[]";// 若数组元素个数为0,直接返回[]即可
		StringBuilder sb = new StringBuilder();
		sb.append("[");
		for (int i = 0; i < nElements; i++) {
			sb.append(a[i] + ",");
		}
		sb.deleteCharAt(sb.length() - 1);
		sb.append("]");
		return sb.toString();
	}

	/**
	 * 打印数组
	 */
	public void display() {
		System.out.println(toString());
	}

	/**
	 * 插入value
	 * 
	 * @param value
	 */
	public void insert(long value) {
		if (nElements >= a.length) {// 数组已满
			System.out.println("array is full.");
			return;
		}
		// 未满则进行插入,个数加一
		a[nElements] = value;
		nElements++;
	}

	/**
	 * 删除value
	 * 
	 * @param value
	 * @return
	 */
	public boolean delete(long value) {
		if (nElements == 0) {// 数组为空
			System.out.println("array is empty...");
			return false;
		}
		// 找到要删除的元素索引j
		int j;
		for (j = 0; j < nElements; j++) {
			if (value == a[j])
				break;
		}
		// 数组中不含value元素
		if (j == nElements)
			return false;
		//若有value元素,则从该元素位置开始到倒数第二个元素,每个元素被其后一个替换,
		//即后面的元素往前移动一个位置。此处中文版边界有错误
		else {
			for (int k = j; k < nElements - 1; k++) {
				a[k] = a[k + 1];
			}
			nElements--;
			return true;
		}
	}

	/**
	 * 数组中是否包含元素key
	 * 
	 * @param key
	 * @return
	 */
	public boolean find(long key) {
		int j;
		for (j = 0; j < nElements; j++)
			if (a[j] == key)
				break;
		if (j == nElements)
			return false;
		else
			return true;
	}

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

public class ArrayDemo {
	public static void main(String[] args) {
		HighArray la = new HighArray(10);
		int[] a = { 1, 3, 3, 4, 2, 6, 7, 9, 8, 12, 33 };
		for (int i = 0; i < a.length; i++) {
			la.insert(a[i]);
			la.display();
		}
		// System.out.println(la.find(3322));
		// for(int i = 0;i<a.length;i++){
		// la.delete(a[i]);
		// la.display();
		// }
		// la.delete(3);
		la.delete(3);
		la.display();
	}
}

原文地址:https://www.cnblogs.com/fstack/p/5617266.html