2016-03-31 2 views
1

私はjavaでプログラムを書いています。私はノードが別のリストであるリストを作る必要があります。サブリストのノードのための私のコードはこれです:リストを埋めるときにJavaヒープスペースの例外

public class Page { 

    private String word; 
    private int num; 

    public String getWord() { 
     return word; 
    } 
    public void setWord(String word) { 
     this.word = word; 
    } 
    public int getNum() { 
     return num; 
    } 
    public void setNum(int num) { 
     this.num = num; 
    } 

    public Page(String word, int num) { 
     this.word = word; 
     this.num = num; 
    } 

} 

私のメインリストのノードのための私のコードは次のとおりです。

import java.util.ArrayList; 

public class IndPage { 
    private ArrayList<Page> Eggrafi; 
    //private ArrayList<Page> Eggrafi = new ArrayList<Page>(); 

    public IndPage(String name, int bytes) { 
     Eggrafi = new ArrayList<Page>(); 
     Eggrafi.add(new Page(name, bytes)); 
    } 

    public ArrayList<Page> getEggrafi() { 
     return Eggrafi; 
    } 

    public void setEggrafi(ArrayList<Page> eggrafi) { 
     Eggrafi = eggrafi; 
    } 

} 

私は私のリストを埋めるために私のメイン、次のコードで使用

if(Index.size()!=0){ 
          for(int j=0;j<Index.size();j++){ 
           for(int y=0;y<Index.get(j).getEggrafi().size();y++){ 
            if((Index.get(j).getEggrafi().get(y).getWord()).equals(tokens[i-1])){ 
             Index.get(j).getEggrafi().add(new Page(fileName[k],byte_count)); 
            } 
            else{ 
             Index.add(new IndPage(fileName[k],byte_count)); 
            } 
           } 
          } 
         } 
         else{ 
          Index.add(new IndPage(fileName[k],byte_count)); 
         } 

また、私のメインのリストには、このように宣言されています:

List<IndPage> Index = new ArrayList<IndPage>(); 
私は、Javaのヒープ領域の例外を取得します

私は多くのことを試みましたが、まだJavaのヒープスペースの例外を取得しています。

+1

「private ArrayList Eggrafi;」と宣言します。 2回(クラスとコンストラクターで)2回初期化します。 – Tokazio

+0

私は非公開ですArrayList Eggrafi = new ArrayList (); さんがコメントにありました。 –

答えて

3

あなたの問題は、あなたのforループである:ループの

for(int j=0;j<Index.size();j++){ 
    for(int y=0;y<Index.get(j).getEggrafi().size();y++){ 
    if((Index.get(j).getEggrafi().get(y).getWord()).equals(tokens[i-1])){ 
     Index.get(j).getEggrafi().add(new Page(fileName[k],byte_count)); 
    } 
    else{ 
     Index.add(new IndPage(fileName[k],byte_count)); 
    } 
    } 
} 

あなたは、 list.size()関数に対してチェックを行うと、それらのリストに新しい項目が追加されるため、.size()は常にjまたはyのインデックス変数より少なくとも1つ多くなり、ループは決して終了しません。最終的には、あなたをヒープスペースから追​​い出すことになります。 Index.size()およびIndex.get(j).getEggrafi()。size()の値は、毎回forループによって再計算され、キャッシュされません。

2

私はあなたがコードを挿入するたびに新しいリストを割り当てていると思います。

import java.util.List; 
import java.util.ArrayList; 

public class IndPage { 
    private List<Page> Eggrafi = new ArrayList<Page>(); 

    public IndPage(final String name, final int bytes) { 
     Eggrafi.add(new Page(name, bytes)); 
    } 

    public List<Page> getEggrafi() { 
     return Eggrafi; 
    } 

    public void setEggrafi(final List<Page> eggrafi) { 
     Eggrafi = eggrafi; 
    } 

} 

ループのコードは、Java 5スタイルのコレクションは、すなわちループを使用することによって改善することができます。

for (final Page page : Eggrafi) { 
    ... 
} 
+0

私はこれを使用して、まだ例外を取得しています.. –

関連する問題