数组的增删改查操作-java实现
数组在数据结构中是一个永恒的话题,其作用在此就不再细说,如果有问题可以百度或者google搜索一大推,在这里我想采用java中面向对象的思想实现对数组的增删改查操作。
这里有几点需要说明:
1,java中的数组是一种静态的数据类型,数组的长度一经声明将不可再更改。但允许动态进行声明
2,在实现数组的查询中,不同于网上或者传统的做法:只是找到数组中第一次出现的待查找数据。我本来也想做这样的事,但想想会很无趣,因为在C语言那会已经实现了多次,这次想换种新意!即:待查找的数据在数组中可能不止一次出现,本程序将实现查找出这些数据,即找出所有的待查找的数据。
3,在执行删除与修改数据操作时候也是如此,待删除的数据在原数组中可能出现多次,既然是要删除待删除的数据,那就应当删除所有。修改也是同样的道理。
下面是程序--原谅我直接上代码了,因为我还是倾向于"代码里见真知"。其中在代码中有做了说明。
package dataStructures.array;
/**
* 数据结构--数组的基本操作
* @author zhonglinsen
*
*/
class ArrayModel {
//声明一个数组array,以及数组的元素个数number
private int[] array;
private int number=0;
//count:用于查询时候 遇到原先数组的个数有多个情况进行记录,设置了get set方法进行访问
private int count=0;
public void setCount(int c){
this.count=c;
}
public int getCount(){
return this.count;
}
//构造函数:设置数组的初始化元素个数
public ArrayModel(int num){
this.array = new int[num];
}
/**
* 插入数据
* @param value
*/
public void insertArray(int value){
this.array[number]=value;
number += 1;
}
/**
* 展示数组数据:其中注意数组的个数采用 成员变量number进行遍历
*/
public void displayArray(){
System.out.print("数组元素为: ");
for (int i = 0; i < number; i++) {
System.out.print(this.array[i]+" ");
}
System.out.println();
}
/**
* 查询数据:因为查询到的数据可能有多个,故而这里采用了不同于传统做法(只认为存在一个数据或者只返回第一个数据),其中可以访问成员变量
* getCount()获取查询到的数据有多少个,而不是通过valueIndex.length来获取查询到的数据的个数
* @param value
* @return
*/
public int[] selectArray(int value){
int index=0,num=0;
int[] valueIndex=new int[this.number];
for (int i = 0; i < number; i++) {
if (this.array[i]==value) {
index=i+1;
//在此valueIndex数组存放的是待查找的所有数组元素的位置:从1开始
valueIndex[num++]=index;
}
}
this.setCount(num);
return valueIndex;
}
/**
* 删除数据:考虑到待删除的数据在原数组中存在多个--注意如果待删除的数据个数有多个,则需要逐个遍历,逐个执行删除操作。
* 其中注意两点:
* 一:这里删除操作因为操作对象是数组,故而是数据的往前移位
* 二:逐个遍历待删除的数据时候,下一个数据要注意本身的值大小需要减1,因为返回的IndexValue数组存放的原数组中元素的位置(从1开始)
* @param value
* @return
*/
public int deleteArray(int value){
int[] indexValue=this.selectArray(value);
if (this.getCount()==0) {
return 0;
}else{
for (int i = 0; i < this.getCount(); i++) {
int delValPos=indexValue[i]-1;
for (int j = delValPos; j < number-1; j++) {
this.array[j]=this.array[j+1];
}
this.number -= 1;
//这里不同于update:因为在这里上面的数据往前面搬迁使得在原先的位序上减一了,再加上本身还需要减一
if (i+1 <=this.getCount()-1) {
indexValue[i+1] -= 1;
}
}
return 1;
}
}
/**
* 修改数据操作:建立在查询的基础上,但不同与删除操作,不需要在前一个数据修改完成之后将位序值大小减1,因为修改操作不涉及数组移位的过程
* @param value
* @param newValue
* @return
*/
public int updateArray(int value,int newValue){
int[] indexValue=this.selectArray(value);
if (this.getCount()==0) {
return 0;
}else{
for (int i = 0; i < this.getCount(); i++) {
int delValPos=indexValue[i]-1;
this.array[delValPos]=newValue;
}
return 1;
}
}
}
public class ArrayOperation{
public static void main(String[] args) {
int number=10;
ArrayModel array=new ArrayModel(number);
//插入一批数据
array.insertArray(12);
array.insertArray(34);
array.insertArray(2);
array.insertArray(23);
array.insertArray(5);
array.insertArray(12);
array.insertArray(34);
System.out.println("--插入一批数据后显示数据--");
array.displayArray();
//插入一个数据
int insVal=23;
array.insertArray(insVal);
System.out.println("--插入一个数据"+insVal+"后显示数据--");
array.displayArray();
//查询数据
int selVal=2;
int[] indexValue=array.selectArray(selVal);
if (array.getCount()==0) {
System.out.println("查询不到数据: "+selVal);
}else{
System.out.println("数据:"+selVal+"在数组中的位置有: ");
for (int i = 0; i < array.getCount(); i++) {
System.out.println("第"+indexValue[i]+"个");
}
}
//删除数据
int delVal=2;
int delRes=array.deleteArray(delVal);
if (delRes==0) {
System.out.println("没有这个数据: "+delVal+" 删除失败");
}else{
System.out.println("成功删除数据: "+delVal);
}
System.out.println("--删除数据后显示数据--");
array.displayArray();
//修改数据
int oldValue=5;
int newValue=55;
int updateRes=array.updateArray(oldValue, newValue);
if (updateRes==0) {
System.out.println("不存在数据: "+oldValue+" 修改失败");
}else{
System.out.println("成功修改数据: "+oldValue+" 为:"+newValue);
}
System.out.println("--修改数据后显示数据--");
array.displayArray();
}
}
运行结果截图:
以上即为运行结果,如果有更好的实现方法或者疑问,欢迎与我讨论!