我们知道,在C语言和java当中都是一种十分重要的数据结构,但是熟悉数组的朋友都知道,数组一旦被赋值就很难被轻易改动,相比之下人们往往更偏向另一种类似于数组当中但比数组更灵活的集合类型。但是,爱挑战的我。纵使数组在复制之后很难被改动,但是不意味着不能被改动,今天我就教大家如何对数组进行添加元素和删除元素操作以及插入元素操作。

打开eclipse我们新建一个类,加入main方法后声明一个数组,来(上代码)!

package ShuZu;

import java.util.Arrays;

public class Arry1 {

/*

* 如何增加数组中的元素

* 1)先创立一个新数组

* 2)将老数组的元素加进新数组里面

* 3)其余的元素自己家此处加一个9

*/

public static void main(String[] args) {

int[] arry = new int[] {6,7,8};

//创建一个新数组,其长度为老数组的加一

int[] newArry = new int[arry.length+1];

System.out.println("未添加之前的数组:"+Arrays.toString(arry));

int dst = 9;

for(int i =0;i<arry.length;i++) {

//将原数组加入到新数组当中

newArry[i]=arry[i];

}

//将目标元素加入到新数组当中

newArry[arry.length]=dst;//此处arry.lenth是新数组的最后后一个元素,为什么?第一个元素从零开始算起

//新数组替换原数组

arry=newArry;

//输出数组的值

System.out.println("添加之后的数组:"+Arrays.toString(arry));

}

}

执行结果如下:

对于对数组添加元素的操作当中,最核心的一部分就是新建一个空数组并且使该数组的长度为原数组长度加一,然后再将旧数组当中的元素一一复制到这个新数组当中然后再将目标元素添加进入数组即可也就是这个操作:newArry[arry.length]=dst;对于为什么该数组下标为Arry.length,那是因为数组的下标都是从零开始算,因此该数组最后一个值当然是原数组的长度了。当然笔者还在思考另一个问题: for(int i =0;i<arry.length;i++) {

//将原数组加入到新数组当中

newArry[i]=arry[i];

}在这段循环当中为什么i<arry.length而不是i<newArray.length呢?那是因为在该循环体当中进行赋值操作时newArray[i]=arry[i],当i=newArray.length时,arry[]是会出现越界操作。

接下来我们继续讲讲如何在原数组当中进行删除元素操作上代码:

package ShuZu;

import java.util.Arrays;

public class Arry2 {

public static void main(String[] args) {

int[] arry =new int[] {4,5,6,7,8};

System.out.println("删除之前的数组:"+Arrays.toString(arry));

//要删除的目标元素下标此处是在该数组的第2个位置进行删除

int index =2;

//新建一个数组

int[] newArry = new int[arry.length-1];

//弄一个循环,,将原数组符合条件的加进新数组当中

for(int i = 0;i<newArry.length;i++) {

if(i<index) {//在下标元素之前

newArry[i] =arry[i];

}else {//下标元素之后

newArry[i]=arry[i+1];

}

}

//新数组对老数组进行替换

arry = newArry;

//输出新数组

System.out.println("删除之后的数组:"+Arrays.toString(arry));

}

}

其运行结果如下:



仔细观察代码,我们会发现,删除元素的操作依旧是新建一个空数组并使它的长度为原数组减一。

然后进行筛选,将原数组当中符合条件的元素一一复制到新数组当中。

接下来是插入元素操作:

import java.util.Arrays;

public class array3 {

public static void main(String[] args) {

//建立一个数组,并进行赋值

int[] arry = new int[] {2,3,4,5,6};

System.out.println("插入之前的操作:"+Arrays.toString(arry));

int index=2;//设置下标索引值

int element = 9;//设置插入的值

//再创建一个新数组,并且将其长度设置为原数组的长度加一

int[] newArray = new int[arry.length+1];

for(int i =0;i<arry.length;i++) {

//接下来对原数组的元素进行筛选操作

if(i<index) {

newArray[i]=arry[i];

}else {

//当i=时,将其空出。之后的位置继续由原数组复制添加进来

newArray[i+1]=arry[i];

}

}

//将新数组下标为index的空元素进行填补。就是插入操作

newArray[index] = element;

//将原数组用新数组进行替换

arry = newArray;


System.out.println("笔者在3和4之间插入一个9");


System.out.println("插入后的数组:"+Arrays.toString(arry));//将数组转为字符串输出。

}

}

其运行结果如下:


仔细观察上述代码操作我们不难发现,在进行元素添加、删除和插入操作时。其核心思想都是新建一个空数组,然后将原数组当中符合条件的元素一一复制到新的数组当中。最后我想请大家思考一下,如果将上述操作用一个类封装起来并用面向对象的思想实现会是怎么样的呢?那么他们和集合有什么区别呢?