当我运行以下程序时,它显示给定数组的子集,其中数组大小为 <=19 ,它工作正常。但如果数组大小 >19,则会引发 Java 堆空间异常。如何克服这个问题以获得数组大小> 19的子集?
import java.lang.*;
import java.util.*;
class def
{
static List<List<Integer>> subset(int ele,List<List<Integer>> w)
{
if(w.size()==0)
{
List<Integer> temp=new ArrayList<Integer>();
temp.add(ele);
w.add(temp);
}
else
{
int i,len=w.size();
for(i=0;i<len;i++)
{
List<Integer> temp=new ArrayList<Integer>();
for(Integer agh:w.get(i))
{
temp.add(agh);
}
temp.add(ele);
w.add(temp);
}
List<Integer> ghi=new ArrayList<Integer>();
ghi.add(ele);
w.add(ghi);
}
return w;
}
static void sub(int set[])
{
List<List<Integer>> ints = new ArrayList<List<Integer>>();
int len=set.length,i;
for(i=0;i<len;i++)
{
ints=subset(set[i],ints);
}
int count=0;
for(List<Integer> temp:ints)
{
System.out.println("SET---"+count++);
for(Integer agh:temp)
{
System.out.println(agh);
}
}
}
public static void main(String args[])
{
int a[]={3,4,9,14,15,19,28,37,47,50,54,56,59,61,70,73,78,81,92,95,97,99};
sub(a);
}
}
这是一个例外:C:\Program Files (x86)\Java\jdk1.6.0_07\bin>javac def.java
C:\Program Files (x86)\Java\jdk1.6.0_07\bin>java def
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at def.subset(def.java:22)
at def.sub(def.java:39)
at def.main(def.java:55)