【问题标题】:Java using array[] to assign to next indexJava使用array []分配给下一个索引
【发布时间】:2014-02-03 23:52:25
【问题描述】:

所以我知道 Java 将数组的大小视为不可变的,但在 PHP 等其他语言中,我已经能够使用 [] 为数组的下一个索引赋值:

PHP:

$arr = array();

//Arr looks like this
$arr => {}

$arr[] = "Value";

//Arr looks like this
$arr => {"Value"}

Java中有类似的功能吗?

int[] arr = new int[0];
arr[] = 3;
arr[] = 4;

//arr => [3, 4];
 

【问题讨论】:

  • Java 数组不是不可变的,但不能调整大小。你需要ArrayList<T>
  • 我对 ArrayList 很熟悉,我只是想知道是否有一种动态解决方法可以在每次更改大小时创建一个新数组。哦,我的意思是大小是不可变的,而不是整个对象:P
  • @David “每次你想改变大小时创建一个新数组的动态解决方法”被称为ArrayList,你可以在其中预先分配你想要的空间想要并让图书馆为您管理它。
  • @David:所以你是说,“我知道你不能改变大小,但我有什么办法可以改变大小吗?”?什么?

标签: java arrays


【解决方案1】:

在java中你必须在创建数组时设置它的大小

int[] arr = new int[2];

然后,一旦创建了数组,您就可以像这样向特定索引添加值:

arr[0] = 3;
arr[1] = 4;
//Now arr = {3, 4}

但是,您不能将第三个值添加到数组arr,因为大小固定为 2。如果您需要更改数组的大小,ArrayList 会更好。您可以只使用add() 方法,它会将值添加到数组的末尾

ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(3);
arr.add(4);
arr.add(5);
//Now arr contains the values {3, 4, 5}
//You can continue you add values

编辑:另一种选择是使用Arrays.copyOf(int[] arr, int size)

int[] arr = {3, 4};
//arr contains the values {3, 4}
int[] arr2 = Arrays.copyOf(arr, 4);
//arr2 contains the values {3, 4, 0, 0}

【讨论】:

  • 好的,所以有 no 方法可以动态更改大小。每次我想添加新索引时都必须重新创建整个数组?
  • 是的。您可以创建一个为您执行此操作的方法,但您必须遍历整个数组并将每个值添加到新的更大的数组中。
  • @David ArrayList 不会每次都重新创建整个数组。它在内部管理一个比列表的逻辑容量更大的数组,因此它有增长的空间。它仅在需要时重新创建数组。
  • @mdewitt 正是我想知道的!非常感谢! +1/接受
  • 我认为,您也可以使用 Arrays.copyOf(...) 创建更大的数组。
【解决方案2】:

如前所述,Java 数组无法调整大小。但是,如果您使用ArrayList&lt;Integer&gt;,则可以使用add() 函数来获得所需的结果。

【讨论】:

    【解决方案3】:

    没有。您必须使用自己的索引或使用ArrayListadd 方法

    【讨论】:

      【解决方案4】:

      几乎。数组创建有一个简写语法:

      int[] arr = {3, 4};
      

      否则使用自动调整大小的列表:

      List<Integer> list = new ArrayList<>();
      list.add(3);
      list.add(4);
      // etc
      

      【讨论】:

      • 这个答案有什么用处?
      【解决方案5】:

      在 Java 中,您必须在构造数组时设置数组中元素的数量。所以你不能将更多元素附加到数组的末尾。

      您可以执行以下操作以移动到数组中的下一个元素:

      int[] arr = new int[2];
      int = 0;
      arr[i++] = 3;
      arr[i++] = 4;
      

      因为i 在分配每个数组元素后递增。

      如果你真的想追加到列表的末尾,你应该使用 Java 集合类。不幸的是,您不能拥有原始类型的集合(例如 int)。

      【讨论】:

        猜你喜欢
        • 2022-06-14
        • 2016-12-05
        • 1970-01-01
        • 2022-11-13
        • 2013-04-01
        • 1970-01-01
        • 2017-02-02
        • 2020-05-18
        • 2017-04-03
        相关资源
        最近更新 更多