【问题标题】:Can I Reuse Array Variables With Changed length?我可以重用改变长度的数组变量吗?
【发布时间】:2018-02-24 05:25:41
【问题描述】:

我可以使用每次改变长度的数组变量吗 喜欢

int [] primes = new int[6];
...
primes = new int[4];

我可以像上面那样再次使用 Prime 吗?可能吗 ?如果不能,你能给我理由吗?谢谢。

【问题讨论】:

  • 你有一个IDE,你为什么不测试一下?
  • 可能,但取决于您的要求。假设您的第一个数组的长度为 6,并且有 6 个元素(用户数据)。现在你想把它转换成一个大小为 4 的数组,那么你是多么愿意冒着丢失两个元素的风险。
  • 这是一个不同的数组。数组在创建时具有固定长度。但是,是的,您可以丢弃六个整数来创建一个可以容纳四个整数的新数组。
  • 您本可以在 Java IDE 中在 3 分钟内自己回答这个问题。

标签: java arrays


【解决方案1】:

您不是重复使用同一个数组,而是创建数组对象的新实例。 java数组对象的长度是固定的(final int),所以实例化后无法改变数组的长度。

【讨论】:

    【解决方案2】:

    对您的问题的一些解释。 您可以运行以下代码,并会得到更好的理解。 由于java无法获取地址,所以这里使用hashcode来显示对象地址。

    int[] prime = new int[]{1,2,3,4};
    System.out.println(Arrays.hashCode(prime));
    System.out.println("prime[0]="+prime[0]);
    
    prime = new int[]{4,3,2,1,0};
    System.out.println(Arrays.hashCode(prime));
    System.out.println("prime[0]="+prime[0]);
    
    
    Output like this:
        955331
        prime[0]=1
        1045631
        prime[0]=4
    

    【讨论】:

      【解决方案3】:

      一旦分配内存,数组就无法调整大小,因为数组获得了连续的内存块。

         int arr[] = new int[3];
      

      一旦内存空间被占用,就无法调整数组的大小,因为下一个连续的内存块可能不可用。您可以创建一个新数组并将先前数组的所有元素转移到具有不同大小的新数组中。

      我建议将ArrayList 用于动态数组。如果您遇到任何此类情况。

      【讨论】:

        【解决方案4】:

        两个独立的数组

        没有更改数组的长度。您正在创建第二个数组,与第一个数组分开且不同。

        您创建了两个数组,但只使用了一个引用变量 (primes) 来跟踪它们。当您将第二个数组分配给primes 时,第一个数组被遗忘了。第一个数组仍在内存中浮动,如果没有其他引用指向它,则最终成为 garbage collection 的候选对象。

        ArrayList

        如果您想调整大小,请使用List 实现,例如ArrayList,而不仅仅是一个数组。您需要存储对象 (Integer) 而不是原语 (int)。 auto-boxing feature in Java 可以掩盖差异。

        int initialCapacity = 6 ;
        ArrayList< Integer > primes = new ArrayList<>( initialCapacity ) ;
        primes.add( 7 ) ;  // The primitive `int` 7 literal is automatically converted via autoboxing to be an `Integer` Object.
        

        ArrayList 会根据需要自动增加容量以存储其他项目。

        如果您希望释放未分配用于容纳任何对象的额外容量,请致电ArrayList::trimToSize()

        【讨论】:

          猜你喜欢
          • 2020-10-15
          • 1970-01-01
          • 1970-01-01
          • 2022-11-27
          • 1970-01-01
          • 2013-10-12
          • 1970-01-01
          • 2014-03-27
          相关资源
          最近更新 更多