java数组扩容

Love The Way You Lie 2022-05-27 20:09 259阅读 0赞

本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流。
未经本人允许禁止转载

说明

在编写一些非参学习算法时,例如DP和HDP,经常会遇到生成新簇的情形,这种情况下,数组的空间就不够用了,需要对原来的数组进行扩容。
例如:

  1. int K=10;
  2. int[] tables = new int[K]; //可以看出该数组最多可存储10个元素
  3. for (int i = 0; i <K; i++) {
  4. tables [i] = i; //数组赋值
  5. }

如何让上面已经赋值的数组扩展到可存储11个元素、12个元素等等呢?

针对二维数组,如下:

  1. int C =10;
  2. int[][] tablesNum = new int[C][10];
  3. 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()方法。

  1. //将数组放大,确保不越界
  2. public static int[] ensureCapacity(int[] arr,int i) {
  3. int length = arr.length;
  4. int[] arr2 = new int[length+i];
  5. System.arraycopy(arr, 0, arr2, 0, length);
  6. return arr2;
  7. }
  8. //将数组放大,确保不越界
  9. public static int[][] ensureCapacity(int[][] array,int i,int j) {
  10. int[][] arr = new int[array.length +i][array[0].length +j];
  11. //扩展
  12. for(int c = 0; c< array.length; c++) {
  13. //数组拷贝
  14. System.arraycopy(array[c], 0, arr[c], 0, array[c].length);
  15. }
  16. return arr;
  17. }

算例程序

  1. import java.util.List;
  2. public class Test {
  3. public static void main(String[] args) {
  4. int K=10;
  5. int[] tables = new int[K];
  6. for (int i = 0; i <K; i++) {
  7. tables [i] = i;
  8. }
  9. tables = ensureCapacity(tables,3);
  10. tables[K]=10;
  11. for (int i = 0; i < tables.length; i++) {
  12. System.out.print(tables[i]+"\t");
  13. }
  14. System.out.println();
  15. System.out.println("======================");
  16. int C =10;
  17. int[][] tablesNum = new int[C][10];
  18. for (int i = 0; i < tablesNum.length; i++) {
  19. for (int j = 0; j < tablesNum[i].length; j++) {
  20. tablesNum[i][j] = i*j;
  21. }
  22. }
  23. tablesNum = ensureCapacity(tablesNum,2,2);
  24. for (int i = 0; i < tablesNum.length; i++) {
  25. for (int j = 0; j < tablesNum[i].length; j++) {
  26. System.out.print(tablesNum[i][j]+"\t");
  27. }
  28. System.out.println();
  29. }
  30. }
  31. //将数组放大,确保不越界
  32. public static int[] ensureCapacity(int[] arr,int i) {
  33. int length = arr.length;
  34. int[] arr2 = new int[length+i];
  35. System.arraycopy(arr, 0, arr2, 0, length);
  36. return arr2;
  37. }
  38. public static int[][] ensureCapacity(int[][] array,int i,int j) {
  39. int[][] arr = new int[array.length +i][array[0].length +j]; //扩展
  40. for(int c = 0; c< array.length; c++) {
  41. System.arraycopy(array[c], 0, arr[c], 0, array[c].length); //数组拷贝
  42. }
  43. return arr;
  44. }
  45. }

程序运行结果

这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,259人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java数组扩容

    本博文源于自己遇到一个扩容问题,以往数组扩容就是利用数据结构元素向后移动,但这java刚再次熟悉,不好操作最后还是用双指针法进行解决。 数组扩容思想 找到元素

    相关 Java基础数组扩容和拷贝

    关于一维数组的扩容。 在java开发中,数组长度一旦确定不可变,那么数组满了怎么办? 数组满了,需要扩容。。 java中对数组的扩容是: 先新建一个大容量的数组,然后将

    相关 java数组扩容

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流。 未经本人允许禁止转载。 说明 在编写一些非参

    相关 数组复制/扩容

    简述 编程的过程中,经常会遇到的一个问题是需要将一个数组当中的元素复制到另一个数字来操作或者保存。这时,一种简单高效的方法就显得尤为重要。 首先要申明的是,数组属于引用

    相关 java 数组扩容的方法

    java 拓展数组长度的方法 前言 数组是我们编程常用到的一种最简单的数据结构,操作简单,功能强大。 但是也是一个缺点,就是一旦创建了数组,就不能改变它的大小。