我想实现26个字母大小写不同组合,并把结果保存起来。但是程序执行一会后就会内存溢出,希望高手指点一下,我该怎么改,有什么好的解决方法?代码:public class Init { private final static String dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
private final static int SIZE = 52;
private int scope = 5;
private List<String> result = new ArrayList<String>();
private Stack<Character> stack = new Stack<Character>();
private boolean flag;
StringBuffer sb = new StringBuffer();
Character[] charArray = new Character[5];
public Init() {
} public void build() {
core(scope);
}
//递归调用
private boolean core(int scope) {
if (scope == 0) {
return true;
}
for (int i = 0; i < SIZE; i++) {
scope--;
stack.push(dict.charAt(i));
flag = core(scope);
if (flag) {
save();
}
stack.pop();
scope++;
} return false;
}
//保存结果到list
private void save() { stack.toArray(charArray);
for (Character c : charArray) {
sb.append(c.charValue());
System.out.print(c.charValue());
}
System.out.println();
result.add(sb.toString());
} public static void main(String[] args) {
Init init = new Init();
init.build();
}}
错误:AABRs
AABRt
AABRu
AABRv
AABRw
AABRx
AABRy
AABRz
AABSA
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:216)
at java.lang.StringBuffer.toString(StringBuffer.java:585)
at com.memery.demo.Init.save(Init.java:50)
at com.memery.demo.Init.core(Init.java:33)
at com.memery.demo.Init.core(Init.java:31)
at com.memery.demo.Init.core(Init.java:31)
at com.memery.demo.Init.core(Init.java:31)
at com.memery.demo.Init.core(Init.java:31)
at com.memery.demo.Init.build(Init.java:21)
at com.memery.demo.Init.main(Init.java:55)

解决方案 »

  1.   

    private void save() { stack.toArray(charArray);
    for (Character c : charArray) {
    //增加这一行就不会再出现内存溢出问题
    sb = new StringBuffer();
    sb.append(c.charValue());
    System.out.print(c.charValue());
    }
    System.out.println();
    result.add(sb.toString());
    }
      

  2.   

    防止反复操作。http://blog.csdn.net/APOLLO_TS/archive/2008/06/04/2509419.aspx