1 创建和初始化数组
在 Java 中可以通过如下方式创建数组:
int[] arr = new int[5];
该代码创建了一个长度为 5 的数组。
在 Java 中可以通过如下方式来初始化数组:
int[] arr = new int[]{0, 1, 2, 3, 4};
该方式也可以写成:
int[] arr = {0, 1, 2, 3, 4};
还可以通过循环赋值的方式来初始化数组:
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
2 查找数组中的元素
查找数组中的元素可以通过线性查找的方式,从头遍历数组逐一比对数组中当前位置的元素是否为待查找的元素,如果是,则返回当前元素所在的位置,如果不是,则返回 -1。
Java 代码实现如下:
/**
* @param arr 数组
* @param size 数组已存储元素个数,从 1 开始编号
* @param key 待查找的元素
* @return 如果查找到则返回元素所在位置,未查找到则返回 -1
*/
public static int findByElement(int[] arr, int size, int key) {
for (int i = 0; i < size; i++) {
if (arr[i] == key)
return i;
}
return -1;
}
3 在数组中插入元素
在数组中插入元素,可以先找到元素在数组中要插入的位置,然后再将该位置后的元素依次往后挪,最后将要插入的元素插入到相应的位置上。
以在升序数组中插入元素为例,Java 代码实现如下:
/**
* 在数组中添加元素
*
* @param arr 数组
* @param size 数组已存储元素个数,从 1 开始编号
* @param element 待插入的元素
* @return 返回元素插入的位置,插入失败返回 -1
*/
public static int addElement(int[] arr, int size, int element) {
if (size >= arr.length) {
return -1;
}
int index = size;
for (int i = 0; i < size; i++) {
if (element < arr[i]) {
index = i;
break;
}
}
for (int j = size; j > index; j--) {
arr[j] = arr[j - 1];
}
arr[index] = element;
return index;
}
问题 1:为什么代码中 size >= arr.length 而不是 size > arr.length ?
答:因为 size 为数组已存储元素个数,从 1 开始,而 arr.length 也是从 1 开始的,加上数组中存放元素的位置是从 0 到 arr.length - 1 的,所以当 size = arr.length 时也是不能存放元素的,因此,当 size >= arr.length 时就不能再插入元素了。
问题 2:为什么让 index = size ?
答:size 为数组已存储元素个数,而执行到该语句时说明满足 size < arr.length,我们这里让 index = size 的意思是先默认元素插入到尾部位置,后续在循环中再判断是否需要重新调整元素插入的位置。因为这里是在升序数组中插入元素,所以在循环中判断插入位置的条件是 element < arr[i] ,也就是说如果存在 arr[i] 大于 element ,那么 element 应该插入到 arr[i] 的位置上。
问题 3:为什么让 j = size ?
答:j = size 的意思是从尾部的元素开始,将 index 后的元素依次向后挪。
4 在数组中删除元素
在数组中删除元素可能会出现要删除元素不存在的情况,所以需要先判断删除的元素是否存在,如果存在再进行删除。删除数组中的元素只需将要删除元素后面位置的元素依次往前挪。
Java 代码实现如下:
/**
* 从数组中删除元素 key
*
* @param arr 数组
* @param size 数组已存储元素个数,从 1 开始编号
* @param key 删除的目标值
* @return 返回数组已存储元素个数
*/
public int removeElement(int[] arr, int size, int key) {
int index = -1;
for (int i = 0; i < size; i++) {
if (arr[i] == key) {
index = i;
break;
}
}
if (index != -1) {
for (int i = index + 1; i < size; i++) {
arr[i - 1] = arr[i];
}
size--;
}
return size;
}
代码中用 index 来标记要删除元素的位置,index = -1 时表示要删除的元素不存在,当在后面的循环中查找到了要删除元素时 index 的值将被更新为要删除元素所在的位置,这时说明要删除的元素存在, index != -1 ,随后需要将 index 后面的元素依次往前挪,最后让 size 减 1,完成数组中元素的删除,返回当前数组已存储元素个数。
5 总结
本文使用 Java 完成了数组的创建和初始化,并编码实现了在数组中插入、删除、查找元素。数组插入和删除元素时需要注意边界问题。