java - 如何将数组的大小加倍

标签 java arrays random resize

我必须实现一个从随机生成器获取元素的数组。每当数组到达它的最后一个元素时,将调用方法 resize() 来增加数组的大小。在我的代码中,在调用 resize() 方法之前,一切都会发生,它不会对数组的大小产生任何影响。它应该增加数组的大小以允许输入更多元素。

    for (int j=0; j<arr.length-1; j++) {
        random= generator.nextInt(arr.length*4) ;
        arr[j]=random;

        }

    if(arr_size==arr.length){
        resize(arr);
        for (int h=0; h<(arr.length-1)*2; h++) {
            random= generator.nextInt(arr.length*4) ;
            arr[h]=random;}
    }

这里是调整大小():

     private static void  resize(int[] arr) {

    int[] tmp = new int[2*arr.length];
    System.arraycopy(arr,0,tmp,0,arr.length); 
    arr = tmp;
}

最佳答案

设置 arr = tmp 并不像您想象的那样。您只需将 resize() 方法中的局部变量 arr 指向局部变量 tmp。您要做的是返回 tmp 并将其分配给方法之外的 arr

if(arr_size==arr.length){
    arr = resize(arr);

并将 resize() 方法签名更改为

private static int[] resize(int[] arr) {
    //Resize
    return tmp;
}

要注意的关键是:在 Java 中将对象引用传递给方法时,您传递的是该对象引用的副本,可以将其视为该对象在内存中位置的副本.在被调用方法中对 this REFERENCE 的所有此类操作都不会在该方法之外生效。但是,您可以操纵实际对象本身,因为正如我所说,引用指向内存中具有完全相同对象的相同位置。

但是将内存中某个位置的副本更改为指向内存中的新位置不会导致原始调用对象引用指向同一位置

关于java - 如何将数组的大小加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252450/

相关文章:

java - 数组索引越界异常错误

arrays - Delphi中向量/数组的梯度(nabla)

javascript - 配对号码,必须一次配对一个,不能与自己或小组成员配对

android - 在 android 中使用对象

java - 正则表达式允许; JAVA 中至少 5 位数字并修剪前导/尾随分号

java - Guava 。 CharStreams 检查 null

java - POI Excel 单元格突出显示“已修复的记录 : Format From/xl/style. xml 部分(样式)

java - 读取和存储数组中的唯一值(JAVA)

java - 在android上解码加密信息

php - 生成两个在 PHP 中不相等的数字