通过数组实现类似于集合的功能(包含动态扩容、前平移、后平移、增删改查)

package shuzu;
/**
 * 通过数组实现类似于集合的功能
 * 包含功能有:
 *    
 *    动态添加元素
 *    在指定位置添加元素
 *    
 *    删除指定下标的元素
 *    删除指定内容的首个元素
 *    删除指定内容的所有元素
 *    
 *    修改指定下标的元素
 *    
 *    查询指定元素的下标
 * 
 */
import java.util.Arrays;

public class ArraysTest {
	static int[] arr = new int[5];
	static int num = 0;

	public static void main(String[] args) {
		add(1);
		add(1);
		add(2);
		add(2);
		add(3);
		add(3);
		System.out.println("扩容:      " + Arrays.toString(arr));
		add(5, 5);
		System.out.println("指定位置扩容:          " + Arrays.toString(arr));
		delete(5);
		System.out.println("删除指定位置后的数组为:      " + Arrays.toString(arr));
		deleteContent(1);
		System.out.println("删除指定内容的元素的数组为:        " + Arrays.toString(arr));
		deleteContentAll(3);
		System.out.println("删除指定内容的所有元素的数组为:        " + Arrays.toString(arr));
		update(5, 10);
		query(3);
	}

	// 添加元素
	public static void add(int ele) {
		if (num >= arr.length) {
			arr = doArr();
		}
		arr[num] = ele;
		num++;
	}

	// 在指定位置添加元素
	public static void add(int index, int ele) {
		if (index < arr.length) {
			arr = doArr(index, ele);
		} else {
			System.out.println("数组越界!");
		}
	}

	// 删除指定位置元素
	public static void delete(int index) {
		if (index < arr.length) {
			doCut(index);
		}
	}

	// 删除数组中首次出现的指定内容元素
	public static void deleteContent(int ele) {
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == ele) {
				doCut(i);
				break;
			}
		}
	}

	// 删除指定内容的所有元素
	public static void deleteContentAll(int ele) {
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == ele) {
				doCut(i);
				i = 0;
			}
		}
	}

	// 修改指定位置的元素内容
	public static void update(int index, int ele) {
		if (index < arr.length) {
			arr[index] = ele;
		} else {
			System.out.println("数组越界!");
		}
	}

	// 查询指定的元素内容的首次位置,并显示
	public static void query(int ele) {
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == ele) {
				System.out.println(ele + "所在的下标为" + i);
				break;
			}
			if ((i == arr.length - 1) && (arr[i] != ele)) {
				System.out.println(ele + "不在当前所在的数组");
			}
		}
	}

	// 数组扩容 动态扩容
	public static int[] doArr() {
		int[] arr_ = new int[arr.length + 1]; // arr.length * (3/2)+1 是怎么想的
		arr_ = Arrays.copyOf(arr, arr_.length);
		return arr_;
	}

	// 数组扩容 动态指定位置扩容
	public static int[] doArr(int index, int ele) {
		int[] arr_ = new int[arr.length + 1];
		arr_ = Arrays.copyOf(arr, arr_.length);// 复制给新数组
		for (int i = arr_.length - 1; i >= index; i--) {// 指定位置的元素后移
			arr_[i] = arr_[i - 1];
		}
		arr_[index] = ele;
		return arr_;
	}

	// 数组缩减 动态缩减
	public static void doCut(int index) {
		// 根据指定的序号进行响应的缩减 // 平移覆盖思想
		for (int i = index; i < arr.length - 1; i++) {
			arr[i] = arr[i + 1];
		}
		arr = Arrays.copyOf(arr, arr.length - 1);
	}
}

  

原文地址:https://www.cnblogs.com/1020182600HENG/p/6555553.html