文档章节

动态数组的实现案例

sdksdk0
 sdksdk0
发布于 2016/06/14 13:16
字数 642
阅读 4
收藏 0
点赞 0
评论 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
100行代码解析Dojo树控件拖拽案例

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

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

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

心的哲学
07/02
0
0
【分享】WeX5的正确打开方式(5)——绑定机制

今天继续WeX5的绑定机制。 需求分析 记账本要实现的效果就是可以展示所有账单,还能实时动态编辑每一笔账单,官方案例的效果图如下: 展示页: 编辑页 个人觉得官方案例加入了许多元素,不熟...

没错就是酱紫
2016/07/04
178
0
【实战Java高并发程序设计6】挑战无锁算法

【实战Java高并发程序设计 1】Java中的指针:Unsafe类 【实战Java高并发程序设计 2】无锁的对象引用:AtomicReference 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedRe...

吴小编
2016/02/29
122
0
面试常考的常用数据结构与算法【简】

数据结构与算法,这个部分的内容其实是十分的庞大,要想都覆盖到不太容易。在校学习阶段我们可能需要对每种结构,每种算法都学习,但是找工作笔试或者面试的时候,要在很短的时间内考察一个人...

anlve
05/01
0
0
Java数组篇总结

数组(数组篇学于传智和王伟老师) 1、数组:存储同一种数据类型的多个元素的容器。 2、特点:每一个元素都有编号,从0开始,最大编号是长度-1。编号的专业叫法:索引 3、定义格式 3.1):数据...

任志远Ray
2017/03/10
0
0
Vue数组的动态响应

1.Vue动态响应 ①数据动态响应式是的核心思想之一,动态响应可以简单理解为:数据更新→视图更新;视图更新→数据更新,这里的数据分为和; ②对象:处理对象的方式是通过劫持数据,通过和来...

何凯
2017/09/20
0
0
第4章 方法的操作数组的练习

1.1 方法操作数组练习1.1.1 方法的练习之数组遍历 需求:把遍历数组改进为方法实现,并调用方法 1.1.2 代码案例十四 1.1.3 方法的练习之数组获取最值 需求:把获取数组最值改进为方法实现,并...

我是小谷粒
03/12
0
0
PostgreSQL 类微博FEED系统 - 设计与性能指标

标签 PostgreSQL , feed , 微博 , 推送 , 分区 , 分片 , UDF , 挖掘 , 文本挖掘 背景 类微博系统,最频繁用到的功能: 之前写过一篇《三体高可用PCC大赛 - facebook微博 like场景 - 数据库设...

德哥
04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
36分钟前
16
0
流利阅读笔记30-20180719待学习

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
39分钟前
1
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
52分钟前
7
1
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
今天
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
9
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部