在 Java 编程中,数组是最基础也最常用的数据结构之一。由于数组长度固定的特性,涉及元素的插入、删除等操作时需要特殊处理,无法像动态集合类那样直接操作
代码如下
public class Demo06 {
public static void main(String[] args) {
// 初始数组
int[] arr = {11, 22, 33, 43, 54, 63, 27};
// 测试查找方法(查找元素43)
testFindElement(arr, 43);
// 测试任务1:找到63,插入单个元素999
int[] arrAfterInsertOne = insertOneElement(arr, 63, 999);
System.out.println("\n任务1:插入单个元素后的数组:");
printArray(arrAfterInsertOne);
// 测试任务2:找到63,插入数组{1,2,3}
int[] insertArr = {1, 2, 3};
int[] arrAfterInsertArray = insertArrayElements(arr, 63, insertArr);
System.out.println("\n任务2:插入数组后新数组:");
printArray(arrAfterInsertArray);
// 测试任务3:找到33,删除该元素
int[] arrAfterDelete = deleteElement(arr, 33);
System.out.println("\n任务3:删除元素后的数组:");
printArray(arrAfterDelete);
}
// -------------------------- 基础功能:查找元素位置 --------------------------
/**
* 查找数组中指定元素的索引
* @param arr 待查找的数组
* @param ele 要查找的元素
* @return 元素索引(存在则返回对应索引,不存在返回-1)
*/
public static int findEle(int[] arr, int ele) {
int pos = -1; // 默认值:未找到
// 遍历数组,匹配元素
for (int i = 0; i < arr.length; i++) {
if (arr[i] == ele) {
pos = i; // 找到元素,记录索引
break; // 假设数组中无重复元素,找到后直接退出循环
}
}
return pos;
}
// -------------------------- 任务1:插入单个元素 --------------------------
/**
* 找到指定元素后,在其后面插入1个新元素
* @param arr 原数组
* @param targetEle 目标元素(找到后在其后插入)
* @param newEle 要插入的新元素
* @return 插入后的新数组(原数组不变)
*/
public static int[] insertOneElement(int[] arr, int targetEle, int newEle) {
// 1. 查找目标元素的位置
int targetPos = findEle(arr, targetEle);
if (targetPos == -1) {
System.out.println("任务1:未找到目标元素" + targetEle + ",返回原数组");
return arr;
}
// 2. 创建新数组:长度 = 原长度 + 1(插入1个元素)
int[] newArr = new int[arr.length + 1];
// 3. 复制原数组元素到新数组
for (int i = 0; i < arr.length; i++) {
if (i <= targetPos) {
// 目标元素及其之前的元素,直接复制
newArr[i] = arr[i];
} else {
// 目标元素之后的元素,向后移1位(空出插入位置)
newArr[i + 1] = arr[i];
}
}
// 4. 在目标元素后面插入新元素(索引 = 目标索引 + 1)
newArr[targetPos + 1] = newEle;
return newArr;
}
// -------------------------- 任务2:插入另一个数组 --------------------------
/**
* 找到指定元素后,在其后面插入另一个数组的所有元素
* @param arr 原数组
* @param targetEle 目标元素(找到后在其后插入)
* @param insertArr 要插入的数组
* @return 插入后的新数组(原数组不变)
*/
public static int[] insertArrayElements(int[] arr, int targetEle, int[] insertArr) {
// 1. 查找目标元素的位置
int targetPos = findEle(arr, targetEle);
if (targetPos == -1) {
System.out.println("任务2:未找到目标元素" + targetEle + ",返回原数组");
return arr;
}
// 处理插入数组为空的情况
if (insertArr == null || insertArr.length == 0) {
System.out.println("任务2:插入数组为空,返回原数组");
return arr;
}
// 2. 创建新数组:长度 = 原长度 + 插入数组长度
int newArrLength = arr.length + insertArr.length;
int[] newArr = new int[newArrLength];
// 3. 复制原数组元素到新数组
for (int i = 0; i < arr.length; i++) {
if (i <= targetPos) {
// 目标元素及其之前的元素,直接复制
newArr[i] = arr[i];
} else {
// 目标元素之后的元素,向后移“插入数组长度”位
newArr[i + insertArr.length] = arr[i];
}
}
// 4. 插入目标数组(从“目标索引+1”开始)
for (int i = 0; i < insertArr.length; i++) {
newArr[targetPos + 1 + i] = insertArr[i];
}
return newArr;
}
// -------------------------- 任务3:删除指定元素 --------------------------
/**
* 找到指定元素后,将其从数组中删除
* @param arr 原数组
* @param targetEle 要删除的目标元素
* @return 删除后的新数组(原数组不变;若未找到元素,返回原数组)
*/
public static int[] deleteElement(int[] arr, int targetEle) {
// 1. 查找目标元素的位置
int targetPos = findEle(arr, targetEle);
if (targetPos == -1) {
System.out.println("任务3:未找到目标元素" + targetEle + ",返回原数组");
return arr;
}
// 处理原数组只有1个元素的情况(删除后为空数组)
if (arr.length == 1) {
return new int[0];
}
// 2. 创建新数组:长度 = 原长度 - 1(删除1个元素)
int[] newArr = new int[arr.length - 1];
// 3. 复制原数组元素到新数组(跳过目标元素)
int newArrIndex = 0; // 新数组的索引指针
for (int i = 0; i < arr.length; i++) {
if (i != targetPos) {
// 不是目标元素,复制到新数组
newArr[newArrIndex] = arr[i];
newArrIndex++; // 新数组索引后移
}
// 是目标元素,直接跳过(不复制)
}
return newArr;
}
// -------------------------- 辅助方法:打印数组(便于调试) --------------------------
/**
* 打印数组内容(格式:[元素1, 元素2, ...])
* @param arr 要打印的数组
*/
public static void printArray(int[] arr) {
if (arr == null || arr.length == 0) {
System.out.println("[]");
return;
}
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
if (i != arr.length - 1) {
sb.append(", ");
}
}
sb.append("]");
System.out.println(sb.toString());
}
// -------------------------- 测试方法:验证查找功能 --------------------------
public static void testFindElement(int[] arr, int ele) {
System.out.println("测试查找功能:");
int pos = findEle(arr, ele);
if (pos == -1) {
System.out.println("元素" + ele + "未在数组中找到");
} else {
System.out.println("元素" + ele + "的索引位置为:" + pos);
}
}
}
运行结果
测试查找功能:
元素43的索引位置为:3
任务1:插入单个元素后的数组:
[11, 22, 33, 43, 54, 63, 999, 27]
任务2:插入数组后新数组:
[11, 22, 33, 43, 54, 63, 1, 2, 3, 27]
任务3:删除元素后的数组:
[11, 22, 43, 54, 63, 27]