2011-05-05 20 views
0

2d arraylistを持っていて、ループ内で2dリストのすべてのリストを仮リストに解析したいと思います。また、すべての繰り返しの最後に、この一時的なリストをクリアして、最初の2dのi-estリストを解析する次のステップにしたいと思います。arrayListをクリアする際に問題が発生しました

コードその次:私が原因きちんと明確にその一時doesntのに十分に機能していないいくつかのコマンドを持って

List<List<Integer>> conVert = new ArrayList<List<Integer>>(); 
List<Integer> temp = new ArrayList<Integer>(); 
for (int i = 0; i<conVert.size(); i++){ 
    temp.addAll(conVert.get(i)); 
    Collections.sort(temp); 
    System.out.println(temp); 

    for(int j = 0; j<temp.size(); j++){ 
     // several commands 
    } 
    temp.clear(); 
} 

。何か案が?私は、あなたが問題を抱えていることを明確にすると、conVertに問題があります。

+4

私はあなたがデバッガでコードを実行してみてくださいお勧め:私はこのケースでは、コード自体のために話すようにする方が良いと思います。私はList.clear()が動作し、何年もテストされ、使用されていることを保証することができます。 ;)すべての反復で新しい 'temp'を作成するとどうなりますか?問題は解消されますか? –

+0

問題は、すべての反復でこのコードがtemp内に新しいリストを追加することです。conVert.get(0)= [1,2]の場合、最初のiter temp = [1,2] conVert.get(1)= [3,4] 2番目のiter temp = [1,2,3,4]。 – zenitis

+0

@zenitis上記のコードは実際のコードではありませんか? – pickypg

答えて

0

「古い」ものを消去するのではなく、新品のListを使用することができます。なぜforループの後に空のListが必要でしょうか?このような基本的なデータ構造を再利用することによって得られるものは何もなく、逆の効果をもたらすことさえあります。

Listのスコープが不足すると、実質的に無償でガベージコレクトされますが、明示的に空にするとリソースが必要になります。

EDIT

List<List<Integer>> conVert = new ArrayList<List<Integer>>(); 

for (int i = 0; i<conVert.size(); i++){ 
    List<Integer> temp = new ArrayList<Integer>(); 
    temp.addAll(conVert.get(i)); 
    Collections.sort(temp); 
    System.out.println(temp); 

    for(int j = 0; j<temp.size(); j++){ 
     // several commands 
    } 
} 
+0

私が得たのは、conVertの2番目のリスト(すでに2darrayListである)をtempリストで解析することです。最初のステップでは、2番目の反復で最初のconVert.get(0)int tempリストを解析したいと思います。2番目のリストconVert.get(1)ect – zenitis

+0

@zenitis私が推測するように、いつも:)私の編集で適合したコードを試してみてください。 – kostja

関連する問題