更新時間:2020-11-05 17:41:16 來源:動力節點 瀏覽1209次
當數組定義完成后,數組存儲元素的個數就確定了,因為在定義數組時,要指定數組的長度. 如果想要在數組中存儲更多的數據, 就需要對數組擴容。本文就來為大家介紹Java數組擴容的相關知識。
想要掌握Java數組擴容,必須要先了解數組擴容的一些特性:
1)Java數組對象的大小是固定不變的,數組對象是不可擴容的。
2)利用數組復制方法可以變通的實現數組擴容。
3)System.arraycopy()可以復制數組。
4)Arrays.copyOf()可以簡便的創建數組副本。
5)創建數組副本的同時將數組長度增加就變通的實現了數組的擴容。
package com.wkcto.chapter03.demo01;
import java.util.Arrays;
/**
* 數組擴容
* @author 蛙課網
*
*/
public class Test06 {
public static void main(String[] args) {
// m1(); //完全手動擴容
// m2(); //數組復制調用 了System.arraycopy(0方法
m3(); //調用 Arrays.copyOf(0實現擴容
}
private static void m3() {
// 定義長度為5的數組
int[] data = { 1, 2, 3, 4, 5 };
// 想要在數組中存儲更多的數據,需要對數組擴容
//Arrays工具類copyOf(源數組, 新數組的長度) 可以實現數組的擴容
data = Arrays.copyOf(data, data.length*3/2);
System.out.println( Arrays.toString(data));
}
private static void m2() {
//定義長度為5的數組
int [] data = {1,2,3,4,5};
//想要在數組中存儲更多的數據,需要對數組擴容
//(1) 定義一個更大的數組
int [] newData = new int[data.length * 3 / 2] ; //按1.5倍大小擴容
//(2)把原來數組的內容復制到新數組中
//把src數組從srcPos開始的length個元素復制到dest數組的destPos開始的位置
// System.arraycopy(src, srcPos, dest, destPos, length);
System.arraycopy(data, 0, newData, 0, data.length);
//arraycopy()方法使用了native修飾,沒有方法體, 該方法的方法體可能是由C/C++實現的
//JNI,Java native Interface技術,可以在Java語言中調用其他語言編寫的代碼
//(3) 讓原來的數組名指向新的數組
data = newData;
//
System.out.println( Arrays.toString(data));
}
private static void m1() {
//1)定義長度為5的數組
int [] data = {1,2,3,4,5};
//2)想要在數組中存儲更多的數據,需要對數組擴容
//(1) 定義一個更大的數組
int [] newData = new int[data.length * 3 / 2] ; //按1.5倍大小擴容
//(2)把原來數組的內容復制到新數組中
for( int i = 0 ; i < data.length; i++){
newData[i] = data[i];
}
//(3) 讓原來的數組名指向新的數組
data = newData;
//
System.out.println( Arrays.toString(data));
}
}
在編寫一些非參學習算法時,例如DP和HDP,經常會遇到生成新簇的情形,這種情況下,數組的空間就不夠用了,需要對原來的數組進行擴容。
例如:
int K=10;
int[] tables = new int[K]; //可以看出該數組最多可存儲10個元素
for (int i = 0; i<k; p="" {<="">
tables [i] = i; //數組賦值
}
如何讓上面已經賦值的數組擴展到可存儲11個元素、12個元素等等呢?
針對二維數組,如下:
int C =10;
int[][] tablesNum = new int[C][10];
for (int i = 0; i < tablesNum.length; i++) {
for (int j = 0; j < tablesNum[i].length; j++) {
tablesNum[i][j] = i*j; //二維數組賦值
}
}
可以看出該二維數組最多存儲100個元素,如何讓其存儲更多的元素呢?
解決程序
如下我提供了針對一維數組和二維數組擴容的方法,主要使用的是:System.arraycopy()方法。
//將數組放大,確保不越界
public static int[] ensureCapacity(int[] arr,int i) {
int length = arr.length;
int[] arr2 = new int[length+i];
System.arraycopy(arr, 0, arr2, 0, length);
return arr2;
}
//將數組放大,確保不越界
public static int[][] ensureCapacity(int[][] array,int i,int j) {
int[][] arr = new int[array.length +i][array[0].length +j];
//擴展
for(int c = 0; c< array.length; c++) {
//數組拷貝
System.arraycopy(array[c], 0, arr[c], 0, array[c].length);
}
return arr;
}
以上就是Java數組擴容的相關知識,通過本文中的實例講解,大家對Java數組擴容的疑問應該一掃而空了。想要學習更多的Java數組相關知識可以觀看本站的Java基礎教程,全方位為你打好Java基礎。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習