有关java中数组操作总结——如何删除指定位置的元素
package s01_javabasic.summary; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @描述 移除数组指定位置元素的方法{删除数组中的一个元素并且向前移} * @创建人 Cheri_du * @创建时间 2018年3月31日下午10:48:43 * @修改人 * @修改时间 2018年3月31日下午10:48:43 * @since JDK 1.8 */ public class RemoveArrayEle { public static void main(String[] args) { int[] arr = { 1, 5, 7, 9, 12 }; int index = 2; // 将位置索引为2的元素移除 int[] arr2 = removeElement5(arr, index); // 遍历移除以后的数组 for (int i = 0; i < arr2.length; i++) { System.out.println(arr2[i]); } // 第三方工具 // 16.删除数组中某个位置上的数据 // arr = ArrayUtils.remove(arr, 2); // System.out.println(ArrayUtils.toString(arr));// {1,5,9,12} List list = Arrays.asList(arr); ArrayList<Integer> lis = new ArrayList<Integer>(list); // lis.remove(2); // list.remove(2);// java.lang.UnsupportedOperationException // 改进 } // 位移法 private static int[] removeElement(int[] arr, int index) { // 1.index前面的元素不变,后面的元素下标迁移1位,把指定元素移到最后 for (int i = 0; i < arr.length - 1; i++) { // 将从指定位置的元素赋值为后一个元素,最后会把指定位置元素冲掉,最后的元素会和倒数第二的元素相同 /* * 初始化: 1 5 7 9 12 * i=0,1 1 5 7 9 12 * i=2 1 5 9 9 12 * i=3 1 5 9 12 12 */ if (i >= index) { arr[i] = arr[i + 1]; } } // 2.数组大小缩小1个长度 ----1 5 9 12 arr = Arrays.copyOf(arr, arr.length - 1); return arr; } // 截取法 private static int[] removeElement2(int[] arr, int index) { // 1.将数组以指定元素为分管点截取成两个数组,再拼接即可 int[] arr1 = new int[index]; int[] arr2 = new int[arr.length - 1 - index]; for (int i = 0; i < arr.length; i++) { if (i < index) { arr1[i] = arr[i]; } else if (i > index) { arr2[i - index - 1] = arr[i]; } } for (int i = 0; i < arr1.length; i++) { arr[i] = arr1[i]; } for (int i = 0; i < arr2.length; i++) { arr[index + i] = arr2[i]; } arr = Arrays.copyOf(arr, arr.length - 1); return arr; } // 中间变量法 private static int[] removeElement3(int[] arr, int index) { /* * 解决这个问题的思路(假设删除一个元素): 创建一个新的数组,长度为原来数组减1; 循环复制,匹配的不复制,不匹配的复制到新数组; */ int[] tempArr = new int[arr.length - 1]; int idx = 0; for (int i : arr) { if (i != (arr[index])) { tempArr[idx++] = i; } } return tempArr; } // 截取法优化1 private static int[] removeElement4(int[] arr, int index) { // 创建一个新的长度比arr小1的数组,以index为分割点分段复制元素到新数组中 int[] ary = new int[arr.length - 1]; System.arraycopy(arr, 0, ary, 0, index); System.arraycopy(arr, index + 1, ary, index, ary.length - index); return ary; } // 截取法优化2 private static int[] removeElement5(int[] arr, int index) { // 创建一个新的长度比arr小1的数组,以index为分割点分段复制元素到新数组中 int[] ary = arr; System.arraycopy(arr, index + 1, ary, index, arr.length - index - 1); // System.out.println(ary[ary.length-2]); ary = Arrays.copyOf(ary, ary.length - 1);// Arrays.copyOf内部还是调用System.arraycopy System.out.print(Arrays.toString(ary)); return ary; } }这些方法可能不是最优的,如果大家有其他的方法,欢迎大家一起交流交流!一起学习