有很多小伙伴对于数组的定位和扩容还掌握不太清楚,今天我们就来系统的学习一遍吧!
我们从一个题来入手,这样更容易明白和理解!
一.问题提出:
已知有一个升序的数组{10,13,52,60}, 现在插入一个元素38,要求插入后的数组仍是一个升序的序列
二.问题分析:
看到这样一道题,大家很容易想到,要想得到插入后的数组,肯定要对原有数组进行扩容,那么如何保证插入38后,数组仍是一个升序的呢?
三.问题解决:
扩容: 首先,我们定义给定的数组 int [] arr = {10,13,52,60};
定义扩容后的数组为 int [] arrNew = new int[arr.length+1];
定位:对于数组的定位,我们一般利用索引(index)来解决,对于本题,可以将38与原来的数组每个元素所对应下标的值进行比较,如果38小于其中的值,就说明插入成功
四.代码实现
package TwoDimensionalArray;
public class TwoDimensionalArrayText {
public static void main(String[] args) {
int [] arr = {10,13,52,60};
int insertNum = 38;
int index = -1;//定义初始索引为-1
//先进行定位
//遍历arr数组,如果发现insertNum<=arr[i],说明i 就是要插入的位置
//使用 index 保留 index = i;
//如果遍历完后,没有发现 insertNum<=arr[i],说明index = arr.length
for(int i = 0;i < arr.length;i++){
if(insertNum <= arr[i]){
insert = i;
break;
}
}
if(index = -1){//没找到位置
insertNum = arr.length;
}
//在进行扩容
int [] arrNew = new int[arr.length+1];
for(int i = 0,j = 0;i < arrNew.length;i++){
if(i != index){
arrNew[i] = arr[j];//说明可以把arr的元素拷贝到 arrNew
j++;
}else{
arrNew[i] = insertNum;
}
}
arr = arrNew;//将arrNew的地址给arr
System,out.println("====插入后的数组arrNew是");
for(int i = 0;i < arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}