您的位置:首页 > 编程语言 > Java开发

Java编程基础——数组删除元素操作汇总

2018-04-01 17:03 225 查看
[b]有关java中数组操作总结——如何删除指定位置的元素[/b]
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;
}

}
这些方法可能不是最优的,如果大家有其他的方法,欢迎大家一起交流交流!一起学习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐