【问题标题】:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space error ocurred while adding value in ArrayList [duplicate]线程“主”java.lang.OutOfMemoryError 中的异常:在 ArrayList 中添加值时发生 Java 堆空间错误 [重复]
【发布时间】:2021-11-28 02:28:49
【问题描述】:

这是我从三个数组中查找共同元素的代码。 我正在尝试使用 add() 函数在 ArrayList 中添加元素,但出现内存不足错误。 这是我的代码-

ArrayList<Integer> commonElements(int A[], int B[], int C[], int n1, int n2, int n3) 
{
    // code here
    ArrayList<Integer> ls=new ArrayList<Integer>(n1);
    int i=0,j=0,k=0;
    while(i<n1 && j<n2 && k<n3){
        if(A[i]==B[j] && B[j]==C[k]){
            int t=A[i];
            ls.add(t);
        }else if(A[i]<B[j]){
            i++;
        }else if(B[j]<C[k]){
            j++;
        }else{
            k++;
        }
    }
    return ls;
}

这是我的错误-

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3720)
at java.base/java.util.Arrays.copyOf(Arrays.java:3689)
at java.base/java.util.ArrayList.grow(ArrayList.java:237)
at java.base/java.util.ArrayList.grow(ArrayList.java:242)
at java.base/java.util.ArrayList.add(ArrayList.java:485)
at java.base/java.util.ArrayList.add(ArrayList.java:498)
at Solution.commonElements(GFG.java:68)
at GFG.main(GFG.java:36)

【问题讨论】:

  • 使用调试器单步调试您的代码,您会发现问题所在。在您向列表中添加项目的情况下,哪些循环索引变量会增加?
  • 当所有元素相等时,将其添加到输出并再次迭代。由于您不更改 i、j 或 k,因此元素仍然相同,并且您再次添加相同的元素。又一次。

标签: java arrays arraylist


【解决方案1】:
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 

Java 说它内存不足。有一个无限循环导致条件永远不会退出 while 循环,无限地递增变量之一,直到达到内存上限。查看while流控的条件。

【讨论】:

    【解决方案2】:

    当找到共同元素时,即

    if(A[i]==B[j] &amp;&amp; B[j]==C[k]){ int t=A[i]; ls.add(t); }

    您没有增加 i 或 j 或 k,因此它陷入了无限循环,导致堆空间使用。增加它们应该可以理想地完成工作。

    【讨论】:

      【解决方案3】:

      我需要在 if 条件中增加 i,j,k 以防止出现此错误。

      ArrayList<Integer> commonElements(int A[], int B[], int C[], int n1, int n2, int n3) 
      {
          // code here
          ArrayList<Integer> ls=new ArrayList<Integer>(n1);
          int i=0,j=0,k=0;
          while(i<n1 && j<n2 && k<n3){
              if(A[i]==B[j] && B[j]==C[k]){
                  if(!ls.contains(A[i])){
                      ls.add(A[i]);
                  }
                  i++;
                  j++;
                  k++;
              }else if(A[i]<B[j]){
                  i++;
              }else if(B[j]<C[k]){
                  j++;
              }else{
                  k++;
              }
          }
          return ls;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-11-24
        • 2018-07-08
        • 2011-01-23
        • 2023-03-13
        • 1970-01-01
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多