zoukankan      html  css  js  c++  java
  • 动态数组的实现案例

    Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是List。下面介绍一下List作为Java动态数组的用法。

    我们可以首先编写两个类List.java  和一个测试类Test1.java。将主类和测试类分开写,更有利于扩展性,这是一个非常好的编程思想。下面来看一下我们如何来实现List类。注释已经写得很清楚了,如果有不懂的地方欢迎留言。

    //定义一个容器类
    public class List{
    	final int INIT_LENGTH=10;
    	int[] array=new int[INIT_LENGTH];
    	int index=-1;
    
    	int add(int [] newArray){
    		int temp=index;
    		if(newArray==null){
    			System.out.println("数组不能为空");
    			return -1;
    		}
    
    	if(index+1+newArray.length>array.length){
    		int newlength=(index+1+newArray.length)*2;
    		expand(newlength);
    	}
    	System.arraycopy(newArray,0,array,index+1,newArray.length);
    	index=index+newArray.length;
    	return temp+1;
    	}
    
    	//方法的重载
    	void expand(int newlength){
    		//新创建一个数组,这个新数组的长度两倍大
    		int[] x=new int[newlength];
    		//复制array中的数据到x中
    		System.arraycopy(array,0,x,0,array.length);
    		array=x;
    	}
    
    	void expand(){
    		//新创建一个数组,这个新数组的长度两倍大
    		int[] x=new int[array.length*2];
    		//复制array中的数据到x中
    		System.arraycopy(array,0,x,0,array.length);
    		array=x;
    	}
    
    	//输出指定位置的元素
    	int remove(int i){
    		//判断i是否存在
    		if(i>=0&&i<index){
    			System.arraycopy(array,i+1,array,i,index-i);
    			index--;
    		}else{
    			System.out.println("集合中没有这个索引"+i);
    			return -1;
    		}
    		return -1;
    	}
    
    
    	//添加元素到指定位置
    	//value:要添加的值
    	//i:添加到数组的位置
    	//返回值:添加元素的索引
    	int add(int value,int i){
    		if(i<0||i>index+1){
    			System.out.println("索引越界"+i);
    			return -1;
    		}
    	if(index>=array.length-1){
    		expand();
    	}
    
    	index++;
    	System.arraycopy(array,i,array,i+1,index-i);
    	array[i]=value;
    	return i;
    
    	}
    	//清空
    	void clear(){
    		array=new int[INIT_LENGTH];
    		index=-1;
    	}
    
    	//求出容器的真实大小
    	int size(){
    		return index+1;
    	}
    
    	void add(int value){
    		if( index>=array.length-1){
    			expand();
    
    		}
    		index++;
    		array[index]=value;
    	}
    
    	int[] getArray(){
    
    		//新创建一个数组
    		int[] result=new int[index+1];
    
    		System.arraycopy(array,0,result,0,index+1);
    		return result;
    	}
    }
    

    接下来,我们把测试类写好。

    public class Test1{
    	public static void main(String[] args){
    		List list=new List();
    		int[] r=list.getArray();
    		for(int t:r){
    			System.out.println(t);
    		}
    
    	//开始存元素
    	list.add(1);
    	list.add(2);
    	r=list.getArray();
    	for(int t:r){
    		System.out.println(t);
    	}
    
    	System.out.println("list容器中有"+list.size());
    	for(int i=0;i<10;i++){
    		list.add(i);
    	}
    	//存完后
    	r=list.getArray();
    
    	for(int t:r){
    		System.out.println(t);
    	}
    	System.out.println("list容器中有"+list.size());
    	System.out.println("清空===================");
    	list.clear();
    	System.out.println("清空后,list容器中有"+list.size());
    
    	System.out.println("移除===================");
    	for(int i=0;i<10;i++){
    		list.add(i);
    	}
    	list.remove(3);
    	r=list.getArray();
    
    	for(int t:r){
    		System.out.println(t);
    	}
    	System.out.println("在指定位置添加元素");
    	list.add(888,1000);
    	r=list.getArray();
    }
    }
    
    然后呢,我们使用javac Test1.java     

    java Test1

    就可以顺利编译运行了。


  • 相关阅读:
    交换技术 天高地厚
    【转载】VirtualBox中双虚拟机安装部署OpenStack指南 天高地厚
    Redo log 刷入磁盘示意图 天高地厚
    分布式环境下session的存储的几个解决方案 天高地厚
    【转载】mysql 日志管理 天高地厚
    等待类型的分类 天高地厚
    android gamil.com登录设置
    android : Avoiding Memory Leaks
    用点数据包存你的绘图信息
    android 9patch (讲的很不错,相当全面:转)
  • 原文地址:https://www.cnblogs.com/sdksdk0/p/5585070.html
Copyright © 2011-2022 走看看