数组
数组存储时,是一片连续的存储空间。每一个元素占用相同的内存大小。
数组的空间不一定是满的。假设你创建一个长度为100的数组,但是以实际存储的元素只有10个,那么此时,数组的长度length→100,存储的元素个数 size → 10。
数组存储元素的特征
创建一个数组,数组里面装的是什么?
在java中默认初始化为0
数组一旦创建,长度是固定的。
我们将数组中的元素删除,其实只是将后面的元素往前挪动。可以理解为后面的往前覆盖了要删除元素的位置。
int[] arr = {1,2,3,4,5,6}
如果我要把 2 删除了,那么我想问原来6的位置的元素是什么? int[] arr = {1,3,4,5,6,?}
其实6的位置上还是6,我们是通过size 来标记元素的数量的。所以说最后一个6是访问不到的。
数组的基本操作
查找一个元素
/** * 在数组中查找元素 * @param arr 数组 * @param size 数组中元素的个数 * @param key 带查找的元素 * @return 该元素对应的索引 */ 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; }
## 插入一个元素
将给定的元素插入到有序数组中
首先,先遍历找到要插入元素的位置。将后面的其他元素整体的往右移动。最后再插入的元素。
/** * 在有序数组中插入元素 * @param arr * @param element 要插入的元素 * @param size 数组中元素的个数 * @return */ public static int addByElement(int[] arr,int element,int size) { //异常情况,数组长度是固定,存储的元素不能大于数组的最大长度 //这里等于不能插入是因为,size是从1开始编号 数组长度也是从1开始 他们相等的时候,数组已经满了,所以不能在插入元素了 if (size >= arr.length) { return -1; } //首先找到要插入的位置 int index = size; for (int i = 0; i < arr.length; 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 减一
/** * 在有序数组中删除一个元素 * @param arr * @param size * @param element * @return */ public static int removeByElement (int[] arr,int size,int element) { int index = -1; for (int i = 0;i < size;i++) { if (element == arr[i]) { index = i; break; } } if (index != -1) { for (int i = index + 1; i < size;i++) { arr[i -1] = arr[i]; } //循环结束,数组中元素的个数少一个 size--; } return size; }
数组单调问题
力扣 896 判断一个给定的数组是否为单调数组。
public static boolean isMonotonic (int[] arr) { //单调无非是两种情况 //递增 boolean inc = true; //递减 boolean dec = true; for (int i = 0; i < arr.length -1; i++) { //如果前一个比后一个要小, 1 3 5 7说明是递增的 if (arr[i] < arr[i + 1]) { //将递减true → false dec = false; } //是递减的 10 9 8 7 if (arr[i] > arr[i + 1]) { inc = false; } } //如果是单调的话,两者中必然有一个是true 如果不是单调的话,必然两个都是false 结果也就是false return inc || dec; }