我意识到这个问题之前可能已被问过很多次了, 但对于这个特殊的应用程序,使用循环将无法正常工作,因为我无法索引到集合
我要做的是尽可能有效地从散列集中的数据中获取一组可能的无序对。
因此,如果我的哈希集包含A,B,C,D,E 然后可以使用以下组合:AB,AC,AD,AE,BC,BD,BE,CD,CE,DE
我有哪些选项可以有效地实现这一目标?
非常感谢任何想法
答案 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);
这样的事情!