数组的增删

数组的插入

插入数组元素的操作存在3种情况:

  • 尾部插入

  • 中间插入(包含头部插入)

  • 超范围插入

尾部插入:直接把元素放在数组尾部的空闲位置,等同于更新元素。

中间插入:首先把插入位置以及后面的元素向后移动,腾出地方,再把要插入的元素放到对应的数组位置上。

超范围插入:创建一个新数组,长度是旧数组的2倍,再把旧数组中的元素统统复制过去,实现数组的扩容

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public class MyArray {
private int[] array;
private int size; //size:实际的元素个数

//构造一个数组,初始是空,容量为capacity
public MyArray(int capacity) {
this.array = new int[capacity];
size = 0;
}

//插入元素
public void insert(int element,int index) throws IndexOutOfBoundsException {
//越界判断
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("超出数组实际元素范围");
}
//超容量插入,需扩容
if (size >= array.length) {
resize();
}
//index及之后元素统一向右移动一位,从最后一位元素开始右移
for (int i=size-1;i>=index;i--) {
array[i+1] = array[i];
}
array[index] = element;
size++;
}

//扩容数组
public void resize() {
int[] arrayNew = new int[array.length*2];
//旧数组复制到新数组
System.arraycopy(array,0,arrayNew,0,array.length);
array = arrayNew;
}

//输出数组
public void outPut() {
System.out.println("当前的数组为:");
for (int x=0;x<size;x++) {
System.out.print(array[x]+" ");
}
System.out.println();
}

public static void main(String[] args) {
MyArray myArray = new MyArray(5);
myArray.insert(9,0);
myArray.insert(5,1);
myArray.insert(8,2);
myArray.insert(3,3);
myArray.insert(1,1);
myArray.insert(4,2);
myArray.outPut(); //9 1 4 5 8 3
}
}

数组的删除

数组的删除操作与插入操作的过程相反,假设被删除的元素的索引是x,x之后的元素都要向前挪动1位

删除操作不涉及扩容,比起插入要更简单。

1
2
3
4
5
6
7
8
9
10
11
//删除数组元素
public void delete(int index) throws ArrayIndexOutOfBoundsException {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("index超出数组实际元素范围");
}
for (int i = index;i<size-1;i++) { //size-1,否则array[i+1]=array[size],报错
array[i] = array[i+1];
}

size--;
}
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2021 Silver Shaded
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信