为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

当年话下 2019-08-02 16:49:45
调整数组大小,同时保持Java中的当前元素?我已经搜索了一种在Java中调整数组大小的方法,但是我找不到在保持当前元素的同时调整数组大小的方法。我找到了类似的代码int[] newImage = new int[newWidth];,但这会删除之前存储的元素。我的代码基本上会这样做:无论何时添加新元素,数组都会增加1。我认为这可以通过动态编程完成,但我不知道如何实现它。
查看完整描述

4 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

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

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

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

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


查看完整回答
反对 回复 2019-08-02
?
DIEA

TA贡献1820条经验 获得超2个赞

不好,但有效:

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

如前所述,请使用ArrayList


查看完整回答
反对 回复 2019-08-02
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

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


方法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);

方法2 Arrays.copyOf()

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

Object[] originalArray = new Object[5];   Object[] largerArray = Arrays.copyOf(originalArray, 10);

请注意,此方法通常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());


查看完整回答
反对 回复 2019-08-02
  • 4 回答
  • 0 关注
  • 467 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信