开发动态数组

来源:互联网 发布:mac yosemite 编辑:程序博客网 时间:2024/05/21 01:47

在编写Java程序时,数组是常用的一种数据类型,然而在实际使用时有许多不便之处。为此,文章讨论了代替Java传统数组的动态数组的设计及实现过程,并举例说明了动态数组类的使用方法。
  关键词:Java;动态数组;类;方法
  
  O引言
  
  熟悉Java编程的人员都知道,在创建Java数组时,必须用表达式指定其大小(如:int a[]=new int[3])或通过初始化(如:int a[]={1,2,31)隐式指定其大小,数组对象一旦创建,长度就不可改变。在实际使用这种数组时会有一些问题,如编译器不检查数组下标是否越界,在程序运行过程中不能改变数组的大小,不能进行数组拷贝、赋值等操作,给编程和调试带来了诸多的不便。为此,作者利用Java自身的特点构造了一个可动态创建、操作较为齐全的动态数组类,以解决Java传统数组的不足。
  
  1构造一个动态数组类
  
  1.1定义一个动态数组类DynamicArray
  public class DynamicArray,/以下代码在JDKl.4.2下调试通过
  (pnvate Object elems口:
  private Int length:
  pubIic DynamicArray(){elems=null:Iength=O:}
  pubJjc jnt getLength()
  {if(elems==null)return 0:
  else return length:
  }
  }
  在DynamicArray类中,用elcms数组来存储Object类型的对象元素,由于Java中object是其他所有类的超类,所以可以通过0bject类型的引用来指向子类的对象。字段lengm用来得到当前elcms中存储元素的个数。无参数构造方法将elems初始化为null。
  
  1、2在DynamicArray类中增加添加、删除、获取数组元素的方法
  1.2.1添加数组元素的方法
  pubIjc void appendEIem(Object elem)
  {if(eIems==null){elems=new O bject[1];ems[O]=elem:)
  //若数组为空则新创建一个数组
  else//否则建立一个新数组比原数组长1,将原数组元素拷贝到
  新数组并增加新元素
  {Object temp~=new Object[length+1];
  for(int i=0;i  tem p[length]=eIem;
  elems=temp;
  }
  Iength++:
  }
  1.2.2插入数组元素的方法
  public void insertElem(O bject elem)
  {if(elems==null)(elems=new Object[1];elems[0]=elem:}
  //若数组为空则新创建一个数组
  else//否则建立一个新数组比原数组长1,增加新元素并将原数
  组元素拷贝到新数组
  {Object tempN=new O bject[Iength+1]:
  ternp[0]=elem;
  for(int i=1;i  elems=temp;
  }
  length++:
  }
  1.2.3删除指定下标元素的方法
  pubIic boolean delElem(int index)
  {if(elems==null)return false;//如果没有数组元素
  if(index>=O&&index1)
  //如果下标没有越界
  {Object temp=new O bject[Iength-1]:
  for(int i=0:i  for(int i=index+1;i  elems=temp;length--;
  return true;
  }
  if(index==O&&length==1){elems=null;length--;return true;)
  return flaIse:
  }
  1.2.4读取指定下标元素的方法
  public Object getElem(Int index)
  {if(elems==null)return null;
  else
  if(index>=O&&index  else return nuIl:
  }
  1.2.5清空数组的方法
  public void clearAII()
  (elems=null;length=0:)
  
  2使用动态数组类
  
  (1)创建一个动态数组
  DynamicArray aArray:=new DynamicArray():
  (2)添加一个元素
  aArray.append~em(new Integer(4)):
  (3)插入一个元素
  aArray.insertElem(new Double(10.4)):
  (4)取得一个数组元素
  Integer i=(Integer)aArray.getElem(1):
  需要注意的是,在取得某一数组元素时,应当根据其类型进行强制类型转换。
  (5)删除指定的元素
  boolean bl=aArray.delElem(0);
  (6)清空数组
  aArray.clearAIl()://清空后可以继续增加新元素
  
  3结束语
  
  根据需求,还可以为动态数组类DynamicArray添加其它有意义的方法,如数组的排序、求最大数、求最小数等,那么,它将变成一个功能强大、使用灵活、方便于各种应用的数组类了。
  在c#和Java中系统本身提供了一些列表类,其设计原理与本文思路相同,充分理解本文动态数组的原理对于提高Java类库的认知具有重要意义。
  笔者在多年从事Java教学和软件开发工作中,深感Java普通数组的不足,从而开发了动态数组类DynamicArray,希望能给Java编程人员一些启示。本文设计的动态数组已经在财务管理系统、阅卷系统等多个应用系统中使用,使用效果较好。

原创粉丝点击