从Hashset生成可能的无序组合对

时间:2014-10-16 02:21:56

标签: java combinations

我意识到这个问题之前可能已被问过很多次了, 但对于这个特殊的应用程序,使用循环将无法正常工作,因为我无法索引到集合

我要做的是尽可能有效地从散​​列集中的数据中获取一组可能的无序对。

因此,如果我的哈希集包含A,B,C,D,E 然后可以使用以下组合:AB,AC,AD,AE,BC,BD,BE,CD,CE,DE

我有哪些选项可以有效地实现这一目标?

非常感谢任何想法

3 个答案:

答案 0 :(得分:1)

就效率而言,没有太多的选择:你需要产生一组N 2 项目,这意味着时间也至少是相同的顺序。

由于枚举集是线性的,因此两个嵌套循环将像任何其他方法一样有效地处理它。

外部循环应该从头开始迭代集合。内部的循环应该从外循环迭代器的位置开始,增加一个位置。

答案 1 :(得分:0)

您仍然可以index您的数据,只需添加额外的HashMap<Your_Class, Integer> map即可存储特定数据的索引。

 HashSet<Your_Class> set = ...//HashSet that contains data
 int index = 0;
 HashMap<Your_Class,Integer> map = new HashMap<>();
 for(Your_Class item : set){
     map.put(item, index++);
 }
 //Generate all the set with those indexes, and replace them with map.get(index)

因此,在示例情况下,A具有索引0,B具有索引1,....,因此对于每对01,02,03 ......,只需要将其转换回AB,AC ,. ..

答案 2 :(得分:0)

没有太多的选择。您可以使用以下两个对象将对象排列在不可变对象Class中:

public T Class Arrangement<T>{
      private final T object1;
      private final T object2;

      public Arrangement(T object1, T)

      // get methods... 
}

Set<MyType> mySet = new HashSet<MyType>();

mySet.add(new Arrangement(myObject1, myObject2);

这样的事情!