Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构建随机排列列表的最有效方法_Java_Random_Arraylist_Coupling - Fatal编程技术网

Java 构建随机排列列表的最有效方法

Java 构建随机排列列表的最有效方法,java,random,arraylist,coupling,Java,Random,Arraylist,Coupling,对于给定的集合,如何使用集合中所有可能的成对排列构建阵列列表(自耦合除外) 例如,假设aCollection是一个Set包含teamA、teamB和teamC,而orderedDouble是一个类游戏,构造函数接收两个团队,主机和来宾作为参数。 我想在团队s之间建立一个数组列表,其中包含所有可能的游戏s。也就是说,ArrayList将是组{newgame(teamA,teamB),newgame(teamA,teamC),newgame(teamB,teamA),newgame(teamB,te

对于给定的
集合
,如何使用
集合
中所有可能的成对排列构建
阵列列表
(自耦合除外)

例如,假设
aCollection
是一个
Set
包含
teamA
teamB
teamC
,而
orderedDouble
是一个类
游戏
,构造函数接收两个团队,主机和来宾作为参数。
我想在
团队
s之间建立一个
数组列表
,其中包含所有可能的
游戏
s。也就是说,
ArrayList
将是组
{newgame(teamA,teamB),newgame(teamA,teamC),newgame(teamB,teamA),newgame(teamB,teamC),newgame(teamC,teamB)}
以随机顺序排列。

我想不出比这更快的方法了:

@Test
public void buildMatchUps() {
    List<String> teams = Arrays.asList("A", "B", "C");
    int s = teams.size() * teams.size() - teams.size();
    List<String> matchUps = new ArrayList<String>(s);
    for(String host : teams) {
        for(String guest : teams) {
            if(host != guest) { // ref comparison, because the objects
                                // come from the same list. Otherwise
                                // equals should be used!
                matchUps.add(host + " : " + guest);
            }
        }
    }
    Collections.shuffle(matchUps);
    for(String matchUp : matchUps) {
        System.out.println(matchUp);
    }
}

从itertools.permutations import…哦,等等,这是java:((为什么标准API不能有这些东西。我认为Guava库可以帮助您使用Collections2相当容易地获得一些东西。请注意,尽管此代码在
O(n^2)
中运行。更具体地说,对于
k=teams.size()
,它在
O(n^k)中运行)
。但对于小团队和少量集合号码(本例中为2个团队),它可以正常工作。@Elist使用此代码,然后制作
游戏
对象的
列表,然后调用
集合。shuffle(您的游戏列表);
,那么它是随机的。@skiwi感谢您的编辑,我打算使用与!=进行比较,因为对象应该是完全相同的。顺便说一句,
equals
在继续之前也进行相同的检查:)好的,谢谢您向我介绍
Collections.shuffle()
,似乎这就是我想要的…为了完整起见,请将其添加到您的答案中。无论如何,如果有人知道
集合的时间复杂性。shuffle()
,以及是否有更有效的方法(可能是对无序列表的迭代)@skiwi here
teams.size()==3
但代码在
O(n^2)
中运行,因此它不是
O(n^k)
C : A
B : A
A : C
C : B
B : C
A : B