数组与数组队列

来源:互联网 发布:淘宝袜子好评语100字 编辑:程序博客网 时间:2024/04/27 00:17

数组与数组队列

一、数组:
数组是有序的在定义时已经设定好大小,能存储多种数据类型,根据用途还可以分为n维数组。以下是数组的定义方式:

一维数组
1、数组类型[]数组名=new 数据类型[长度];
2、数据类型 [] 数组名 = {值,...};
3、数据类型 [] 数组名 = new 数据类型[]{值,...};
4、数据类型 [] 数组名;
   数组名 = new 数据类型[长度];
5、数组名 = new 数据类型[]{值,...};

二维数组
1、数据类型 [][] 数组名 = new 数据类型[行][列];
2、数据类型 [][] 数组名 = {{值,...},...};
3、数据类型 [][] 数组名 = new 数据类型[][]{{值,...},...};
4、数据类型 [][] 数组名;
   数组名 = new 数据类型[行][列];
5、数组名 = new 数据类型[][]{{值,...},...};
数组的使用必须先给对象(实例化),再使用:
Array[0]=new Object();
Object obj=Array[0];
obj.方法名(参数);

数组的使用涉及到了数组越界的问题,那么如何来获得数组的界限呢?
1、获取一维数组的元素总数:数组名.length;
2、获取二维数组的行的列数:数组名[r].length;(所谓二维数组,其实是一维数组的一维数组,所以可以认为  数组名[][] 为数组名为数组名[]的一维数组 );
3、获取二维数组的行数:数组名.length;
而获取指定位置的数据:数组名[下标];
      数组名[行下标][列下标];(二维数组中的位置抽象为行与列的存在)。

二、数组的优点与缺点
优点:数组在使用时可以说是很方便了,每一个数据都有他的下标,所以需要用到指定位置的数据时只需要,给定下标就好,寻找方便;
缺点:大小是固定,不能根据数据总数的变化进行更改大小。

三、数组队列:
数组队列的主要作用是优化数组,对其缺点进行覆盖。首先需要想到数组名中存储的是什么?是在堆空间中的内存首地址。所以我们可以创建一个数组队列类,在其中定义一个初始大小为0的数组;在其中添加数据、删除数据、查找数据、修改数据的方法。

四、数组队列的代码实现:
1、代码如下:
 

public class Arrayqueue { //原数组private Object[] obj_1=new Object[0]; private int size;//存储数组的大小//添加数据public void add(Object date){ //新建一个数组 是原数组长度+1 //数组必须先给对象才能用Object[] obj_2=new Object[obj_1.length+1]; //将原数组的数据移进新数组for(int i=0;i<obj_1.length;i++){ obj_2[i]=obj_1[i]; } //将要加入的数据加到最后一位obj_2[obj_1.length]=date; //交换(删除原数组)原数组指向新数组obj_1=obj_2; size++; } //根据索引删除public void delete(int index){ if(index < 0 || index >= size){ throw new RuntimeException("索引越界!"); }else  { //新建一个数组 是原数组长度+1 Object[] obj_2=new Object[obj_1.length-1]; for(int i=0;i<index;i++){//将所要删除的位置之前的所有数据赋予新数组obj_2[i]=obj_1[i]; }  for(int j=index;j<obj_2.length;j++){//将所要删除的位置之后的所有数据赋予新数组obj_2[j]=obj_1[j+1]; } //交换(删除原数组)原数组指向新数组obj_1=obj_2; size--; } } //根据索引查找public Object find(int index){ if(index < 0 || index>= size){ throw new RuntimeException("索引越界!"); }else{ return obj_1[index];//返回查找的数据} } //修改public Object redo(int index,Object date){ if(index < 0 || index>= size){ throw new RuntimeException("索引越界!"); }else{ obj_1[index]=date; return obj_1[index];//返回修改的数据 } }public int size(){ return size;//返回数组的大小}}

 
2、写一个测试类对其进行测试:

public class Test_1 {// 程序入口public static void main(String[] args) { //实例化Arrayqueue的对象Arrayqueue aq=new Arrayqueue(); for(int i=0;i<8;i++){ Object obj1=new Object("张三"+i,i); aq.add(obj1); } //修改数据Object date=new Object("李四         ",100); aq.redo(0, date); //删除aq.delete(3); //添加数据(加到最后一位)Object date_1=new Object("王五         ",300); aq.add(date_1); Print(aq);//打印数据} //打印数据的方法public static void Print(Arrayqueue aq){ for(int t=0;t<aq.size();t++){ Object obj= (Object) aq.find(t); obj.Show(); } }}

 
3、简单的Object类:

public class Object { private String name; private int grade; public Object(String name,int grade){ this.name=name; this.grade=grade; } public void Show(){ System.out.println("name: "+name+"    "+"grade: "+grade); } }

 
五、结
数组队列的实现还是遇到了不少的坎的,但是在真正理解了以后每一句代码又是那么的明了。以下浅谈我遇到的问题
1、空指针异常:
【Exception in thread "main" java.lang.NullPointerException
at com.czj1109.Test_1.Print(Test_1.java:33)
at com.czj1109.Test_1.main(Test_1.java:26)
name: 李四             grade: 100
name: 张三1    grade: 1
name: 张三2    grade: 2】编译结果

********引起错误的代码********
 

//根据索引删除的方法public void delete(int index){ if(index < 0 || index >= size){ throw new RuntimeException("索引越界!"); }else  { //新建一个数组 是原数组长度+1 Object[] obj_2=new Object[obj_1.length-1]; for(int i=0;i<index;i++){//将所要删除的位置之前的所有数据赋予新数组obj_2[i]=obj_1[i]; }  for(int j=index+1;j<obj_1.length-1;j++){//将所要删除的位置之后的所有数据赋予新数组obj_2[j]=obj_1[j+1]; } //交换(删除原数组)原数组指向新数组obj_1=obj_2; size--; } }

 
********修改错误之后的代码********
 

//根据索引删除的方法public void delete(int index){ if(index < 0 || index >= size){ throw new RuntimeException("索引越界!"); }else  { //新建一个数组 是原数组长度+1 Object[] obj_2=new Object[obj_1.length-1]; for(int i=0;i<index;i++){//将所要删除的位置之前的所有数据赋予新数组obj_2[i]=obj_1[i]; }  for(int j=index;j<obj_2.length;j++){//将所要删除的位置之后的所有数据赋予新数组obj_2[j]=obj_1[j+1]; } //交换(删除原数组)原数组指向新数组obj_1=obj_2; size--; } }

 

2、有待完善的地方
//根据内容删除(需重写equals方法)
public void delete(Object date){

}
这一方法还没能够实现。

以上便是我在实现数组队列时的优化分析、思路、以及遇到的问题。

2014 11 15
    梣梓



 

 

0 0
原创粉丝点击