数组四大法宝
增删改查
只要是这运用熟练,基本就没有能难倒的情况
查找元素
查找元素是数组算法的重中之重,一定要好好记忆查找算法
基本思想就是先给设置一个下标值为不可能的变量
一般都是int index = -1
用来记录查找元素的下标,为什么是-1呢,因为数组下标最小值就是0,永远不可能到-1。
//查找算法
int [] num = {15,20,25,30};
int index = -1;
System.out.println("请输入数字");
Scanner in = new Scanner(System.in);
int a = in.nextInt();
for(int i= 0; i < num.length; i++) {
if(num[i] == a) {
index = i;
break;
}
}
if(index == -1) {
System.out.println("很遗憾没找到");
}else {
System.out.println("下标为" + index);
}
增加元素(插入元素)
基本上就是在数组空的位置插入一个数,不排序的话一点问题都没有
最近为了赶时间偷懒把我原来写的代码贴上来
/* 问题:Java中如何向一个已经升序排序好的数组中插入元素,得到的数组依然是升序数组
//* 效果:
//* int[] array = {1,3,7,12,24,36,48};
//* 插入数字9后新数组为
//* int[] newArray = {1,3,7,9,12,24,36,48};
理清一下思路:
1.创建一个新的数组(不要忘了数组创建方式)(扩容)
2.将原来数组的元素赋值给新数组(新数组比老数组多一个位置)
3.查找要插入数组的位置(要输入的数组元素小于被插数组的后一个数)
4.操作下标使原来数组中最后一个下标移动到空的位置,前一个往后一个移动(插队思想)
//* 问题:Java中如何向一个已经升序排序好的数组中插入元素,得到的数组依然是升序数组
//* 效果:
//* int[] array = {1,3,7,12,24,36,48};
//* 插入数字9后新数组为
//* int[] newArray = {1,3,7,9,12,24,36,48};
int [] array = {1,3,7,12,24,36,48}; //原数组
int [] newArray =new int[array.length+1]; //创建新数组,长度比原数组多1
for (int i = 0; i < array.length; i++) { //将原数组的元素赋值给新数组
newArray[i] = array[i];
}
System.out.print("请输入一个数:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt(); //键盘中录入需要插入的数
int index = -1; //定义要查找插入元素的位置下标
for (int j = 0; j < newArray.length; j++) {
if(num < newArray[j]) { //找到要插入为下标找到下标的的这个位置要比后面的数小(升序情况)
index = j ;
break;
}
}
if(index == -1) {
newArray[newArray.length -1] = num;
System.out.println("没找到下标");
}else {
//* 从后往前添加,newArray.length-1为数组的最后一位。
//* i一定小于 index,因为i要循环插入后的元素,所以小于插入元素的下标。
//* i--是因为从数组最大的下标开始,第二次循环是从最后倒是第二个下标开始移动往后移动,覆盖了后面的值,插队的思想,最后一个往空移动,前一个往后面一个移动
for(int i = newArray.length-1; i > index; i--) {
newArray[i] = newArray[i-1];
}
newArray[index] = num;
}
for(int i = 0; i < newArray.length; i++) {
System.out.println(newArray[i]);
}
删除元素
理解了插入一个元素以后,删除本质上是把后一位下标的数字,覆盖前一位的位置上
记得没有新创建数组的情况下,打印的时候要把原来的数组-1,相当于删除了一位
/*
* 删除数组一个元素
* 给出一个数组 a={11,13,15,27}
* 删除13这个元素
*/
int [] a = {11,13,15,27};
int index = -1;
int num = 13;
for (int i = 0; i < a.length; i++) {
if(a[i] == num) {
index = i;
break;
}
}if(index == -1) {
System.out.print("没找到要修改的数据");
}else {
for (int i = index; i < a.length-1; i++) {
a[i] = a [i+1];
}
}
for (int i = 0; i < a.length -1; i++) { //删除一位之后,打印的情况下要-1
System.out.print(a[i]+"\t");
}