调整数组大小,同时保持Java中的当前元素?

Mih*_*nca 56 java arrays

我已经搜索了一种在Java中调整数组大小的方法,但是我找不到在保持当前元素的同时调整数组大小的方法.

我找到了类似的代码int[] newImage = new int[newWidth];,但这会删除之前存储的元素.

我的代码基本上会这样做:无论何时添加新元素,数组都会增加1.我认为这可以通过动态编程完成,但我不知道如何实现它.

Ste*_*eod 91

您无法在Java中调整数组大小.你需要:

  1. 创建所需大小的新数组,并使用将原始数组中的内容复制到新数组 java.lang.System.arraycopy(...);

  2. 使用java.util.ArrayList<T>该类,当您需要使数组更大时,它会为您执行此操作.它很好地封装了您在问题中描述的内容.

  3. 使用java.util.Arrays.copyOf(...)返回更大数组的方法,以及原始数组的内容.

  • 您应该将此问题作为一个单独的问题. (4认同)

jlo*_*rdo 23

不好,但有效:

    int[] a = {1, 2, 3};
    // make a one bigger
    a = Arrays.copyOf(a, a.length + 1);
    for (int i : a)
        System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

如前所述,请使用ArrayList

  • @RyanMcCullagh ArrayLists增加了复杂性,以避免为每次插入或删除制作数组的副本. (3认同)

Anu*_*oob 19

这有几种方法可以做到这一点.


方法1 System.arraycopy():

将指定源数组中的数组从指定位置开始复制到目标数组的指定位置.数组组件的子序列从src引用的源数组复制到dest引用的目标数组.复制的组件数等于length参数.源数组中位置srcPos到srcPos + length-1的组件分别被复制到目标数组的destPos到destPos + length-1的位置.

Object[] originalArray = new Object[5];   
Object[] largerArray = new Object[10];
System.arraycopy(originalArray, 0, largerArray, 0, originalArray.length);
Run Code Online (Sandbox Code Playgroud)

方法2 Arrays.copyOf():

复制指定的数组,使用空值截断或填充(如有必要),以使副本具有指定的长度.对于在原始数组和副本中都有效的所有索引,这两个数组将包含相同的值.对于在副本中有效但不在原始副本中的任何索引,副本将包含null.当且仅当指定的长度大于原始数组的长度时,这些索引才会存在.生成的数组与原始数组完全相同.

Object[] originalArray = new Object[5];   
Object[] largerArray = Arrays.copyOf(originalArray, 10);
Run Code Online (Sandbox Code Playgroud)

请注意,此方法通常System.arraycopy() 在幕后使用.


方法3 ArrayList:

List接口的可调整大小的数组实现.实现所有可选列表操作,并允许所有元素,包括null.除了实现List接口之外,此类还提供了一些方法来操作内部用于存储列表的数组的大小.(这个类大致相当于Vector,除了它是不同步的.)

ArrayList的功能与数组类似,只是当您添加的元素多于它可以包含的元素时,它会自动扩展.它由一个数组支持,并使用Arrays.copyOf.

ArrayList<Object> list = new ArrayList<>();

// This will add the element, resizing the ArrayList if necessary.
list.add(new Object());
Run Code Online (Sandbox Code Playgroud)


Kir*_*man 5

您可以使用ArrayList哪个为您完成工作.