java - 如何从 arrayList 中获取所有可能的功率子集(包括特定项)?

标签 java memory-management collections memory-leaks subset

假设我有一个字符串数组列表,例如[a, b, c, d, ....]。任何人都可以帮助我提供一个示例代码,我怎样才能得到包含此列表中所有可能的功率子集的结果,其中包括该列表中的特定字符串(除了单个子集和空子集)?

例如:如果我想从示例列表中获取包括 a 在内的所有功率子集,那么输出将是:

[a,b], [a,c], [a,d], [a,b,c], [a,b,d], [a,c,d] without the empty and single subset([a])

同样,如果我想要 b 那么输出将是:

[b,a], [b,c], [b,d], [b,a,c], [b,a,d], [b,c,d] without the empty and single subset([b])

由于示例列表中的所有项目都是字符串,因此当子集太丰富时,它们可能会出现内存问题。因为我需要一次将单个字符串的子集保留在内存中。所以我还需要帮助了解这种情况的优化解决方案是什么?

我需要 Java 方面的帮助。由于我不太擅长Java,如果有任何错误请原谅我!

谢谢!

最佳答案

如果您的初始字符串数组列表包含 30 个或更少的项目,您可以使用 set 方法 powerSet (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Sets .html#powerSet%28java.util.Set%29 - 谢谢,Jochen)。该文档声称该方法返回的集合的内存使用量仅为 O(n)。然后,您可以使用 if 条件对其进行迭代,以仅考虑包含“A”且大小为 2 或更大的集合。

我建议您首先尝试上述或类似的简单解决方案,看看是否遇到内存问题。

如果确实遇到内存问题,您可以尝试通过最小化内存中保存的字符串副本数量来进行优化。例如,您可以使用字节、短整型或整数列表(取决于数组列表的长度),其中每个列表都是字符串数组列表的索引。

但是,减少内存使用的 final方法是一次仅在内存中保存一个子集(如果可能)。 IE。生成(A,B),处理它,丢弃它,然后生成(A,C),处理它,丢弃它,等等。

关于java - 如何从 arrayList 中获取所有可能的功率子集(包括特定项)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11144471/

相关文章:

java - Android 按钮的动画效果不符合预期

java - 根据Spring的bean定义bean

Python C API 读取列表列表,分配内存和全局变量

Java 接口(interface)和内存分配

java - 使用具有浮点值的对象对集合进行排序

java - 更改 Swagger 生成的类名称

java - JNDI是什么,建站需要用到它吗

java - Java VM 是否移动内存中的对象,如果是,如何移动?

java - 迭代后从 HashSet 中删除失败

csv - 使用node-csv和meteor-file将CSV导入到集合中