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雙系統安裝方案
- 隨機驗證碼實現案例
- 動態數組的實現案例
- 猜拳游戲案例
- 商業級項目——基金客戶端的架構設計與開發(上)