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
就可以顺利编译运行了。
- 前言
- 内存溢出的解决方案
- 安卓消息推送解决方案
- 语言识别和聊天机器人的实现
- 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)
- 植物大战僵尸经典开发步骤
- 屏幕适配全攻略
- 安卓图像处理入门教程
- android开发常用工具箱
- java基础知识总结
- 剖析软件外包项目
- java基础知识——网络编程、IO流
- 安卓性能优化手册
- 电商活动中刮刮卡的实现
- Android系统的安全设计与架构
- AsnycTask的内部的实现机制
- Android应用UI设计流程
- 数据结构与算法,每日一道
- html5全解析
- 深入解读XML解析
- 新闻客户端案例开发
- 细说Http协议
- win10+ubuntu双系统安装方案
- 随机验证码实现案例
- 动态数组的实现案例
- 猜拳游戏案例
- 商业级项目——基金客户端的架构设计与开发(上)