当要删除数组指定位置的元素e时 可以使用如下方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| public class Array<E> {
private int size;//数组中有效数据的长度。初始值为0 。
private E[] data;//存放数据的数组。
//无参构造函数,数组默认长度为10。
public Array() {
data = (E[])new Object[10];
}
//构造函数,创建用户定义长度的数组。
public Array(int capacity){
data = (E[]) new Object[capacity];
}
}
//删除指定索引的元素,数组默认长度为10
public E remove(int index){
if (index < 0|| index >= size)
throw new IllegalArgumentException("Remove failed , Index is illegal");
E e = data[index];
for (int i = index ; i < size; i++) {
data[i] = data[i + 1];
}
size --;
return e;
}
|
主方法使用代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| public class Test {
public static void main(String[] args) {
Array<Integer> array = new Array<>();
for (int i = 0; i < 10; i++) {
array.addLast(i);
}
System.out.println(array);
array.remove(9);
System.out.println(array);
}
}
运行结果:
Array: size = 10 , capacity = 10
[0,1,2,3,4,5,6,7,8,9] //重写了toString方法。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10
|
产生异常原因:
当 i = size - 1 时 i+1 = size(此时size = data.length) data[size]会产生数组索引越界异常。
1
2
3
| for (int i = index; i < size; i++) {
data[i] = data[i+1];
}
|
解决办法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| for (int i = index; i < size; i++) {
data[i] = data[i+1];
}
改为:
for (int i = index + 1; i < size; i++) {
data[i - 1] = data[i];
}
或:
for (int i = index; i < size - 1; i++) {
data[i] = data[i+1];
}
|
好处:
避免了数组索引越界异常(使i永远要小于size)
减少一次循环次数
赏
谢谢你请我吃糖果
支付宝
微信