数据结构之数组的增删改查-java实现

原创 2015年11月21日 17:35:05

数组的增删改查操作-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();
	}
}



    运行结果截图:



    以上即为运行结果,如果有更好的实现方法或者疑问,欢迎与我讨论!



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java创建数组,实现增删改查

第一种创建方法 int a[] = new int[]{1,4,5};
  • DHM00
  • DHM00
  • 2016年12月12日 15:59
  • 1547

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java实现数组的增删改查

更改数组下标 标志位作用 增加 删除 修改 赋值 查询

Java 数据结构数组实现(增删改查)

1、删除原理: package com.struct.array;/** * @描述 基本数组 * @项目名称 Java_DataStruct * @包名 ...
  • lovoo
  • lovoo
  • 2016年06月20日 21:15
  • 1985

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java对象数组的增删改查

Java为我们提供了集合数组,比如List接口等,同时我们可以直接通过已经封装好的函数进行增删改查,那么我们自己该如何实现对象那个数组的增删改查呢? 我们做一个添加学生信息的project来作为事例...

自定义数组的增删改查(以及Arrays类)

package com.itheima.set;/** * 自定义数组,实现数组的增删改查 * @author Administrator * */ public class MyA...

数组的增删改查

直接上例子程序: 1。查询:输出数组中所有有效元素  for(int i=0;i              System.out.println(name[i]);  } 直接用遍历...
  • vcvcttt
  • vcvcttt
  • 2016年06月13日 13:48
  • 1065

自定义数组的增删改查

package com.zl.arry; //时间:2012.4.8 //功能:自定义数组的增删改查 //作者: public class ArryTest {  /**   * @par...
  • myoral
  • myoral
  • 2012年04月10日 15:31
  • 4790

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构之数组的增删改查-java实现
举报原因:
原因补充:

(最多只允许输入30个字)