文档章节

动态数组的实现案例

sdksdk0
 sdksdk0
发布于 2016/06/14 13:16
字数 642
阅读 7
收藏 0

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

就可以顺利编译运行了。
 

 

© 著作权归作者所有

sdksdk0
粉丝 1
博文 105
码字总数 73456
作品 0
衡阳
程序员
私信 提问
java反射详解【2】

【案例】接下来让我们取得其他类的全部属性吧,最后我讲这些整理在一起,也就是通过class取得一个类的全部框架 class hello { public static void main(String[] args) { Class<?> demo = n...

_shieh
2016/01/25
3
0
数据结构之_动态数组 顺序表的实现

数据结构之_动态数组 顺序表的实现 1.基本概念 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 线性表 (a1,a2,……,an)的顺序存储示意图如下: 2.线...

Mr.Right-w
07/15
0
0
SpringBoot27 JDK动态代理详解、获取指定的类类型、动态注册Bean、接口调用框架

1 JDK动态代理详解   静态代理、JDK动态代理、Cglib动态代理的简单实现方式和区别请参见我的另外一篇博文。   1.1 JDK代理的基本步骤     》通过实现InvocationHandler接口来自定义自...

CRUD_Architect
2018/08/23
0
0
100行代码解析Dojo树控件拖拽案例

案例设定: 创建2个树控件,左右排列。 使用拖动的方式,将树节点从左侧树控件拖拽的右侧树控件。 拖拽过程中右侧树控件要进行验证,确认是否可以方式拖拽中的节点。 放置的处理,识别要放置...

小伙伴伴
2018/04/25
0
0
企业实战脚本案例1:动态监测网站

动态监测网站 目录: 1.脚本功能介绍 2.脚本制作 3.脚本案例 一、脚本功能介绍 当你所在企业中因业务需求,通过公有云(如阿里云、腾讯云等)购买为数不多的云主机部署业务,没有空余资源部署...

心的哲学
2018/07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
11分钟前
8
0
读书笔记:深入理解ES6 (八)

第八章 迭代器(Iterator)与生成器(Generator) 第1节 循环语句的问题   在循环、多重循环中,通过变量来跟踪数组索引的行为容易导致程序出错。迭代器的出现旨在消除这种复杂性,并减少循...

张森ZS
11分钟前
8
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
15分钟前
8
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
24分钟前
7
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM...

阿里云官方博客
27分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部