专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 实例讲解Java数组扩容

实例讲解Java数组扩容

更新时间:2020-11-05 17:41:16 来源:动力节点 浏览959次

当数组定义完成后,数组存储元素的个数就确定了,因为在定义数组时,要指定数组的长度. 如果想要在数组中存储更多的数据, 就需要对数组扩容。本文就来为大家介绍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基础。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>