繁体   English   中英

如何比较 arraylist java 中所有可能的组合

[英]how to compare all possible combination in arraylist java

例如,我们有这种列表(“A”、“B”、“C”、“D”)。 我们需要相互比较,而不是重复比较,例如 output 应该是这样的。

  1. “A”与“B”,“C”与“D”
  2. “A”与“C”,“B”与“D”
  3. “A”与“D”,“B”与“C”

     List<String> list = Arrays.asList("A", "B", "C", "D"); for (int i = 0; i < list.size(); i++) { for (int j = i + 1; j < list.size(); j++) { System.out.print(" Compare " + list.get(i) + " " + list.get(j)); } System.out.println(); }

此代码返回所有组合,但不分组。

要实现“分组”,您可以比较 A 和 B,然后将它们从列表中删除,然后比较剩余的 C 和 D。然后比较 A 和 C,删除它们并比较剩余的 B 和 D。等等。

仅当元素数量为偶数时,您才能对任何列表递归执行此操作,因为从列表中删除 2 个元素后,您希望剩余的元素数量为 2 的倍数,否则您将在结尾

这是您可以做的事情,将列表中的每个元素与所有元素进行比较,并将两者添加到String列表中,以防止重复(在比较它们之前它将查看这两个是否已经存在):

List<String> list = Arrays.asList("A", "B", "C", "D");
List<String> existing = new ArrayList<String>();

for ( String element : list ) {
    for ( String element2 : list ) {
        if (!existing.contains(element+element2)) {
             System.out.println(" Compare "+element+" with "+element2);
             existing.add(element+element2);
           }
    }
}

实际上,您正在研究锦标赛安排问题。 比较是匹配,将 forms 分组一轮。 有很多方法可以做到这一点,您可以从这里开始。

您可以按以下方式解决它:

  1. 创建一个新List ,例如result ,如下例所示。
  2. 使用嵌套循环,创建list.get(i)list.get(j)的组合。 然后,检查它的反向组合是否已经存在于result中; 如果没有,请将此组合添加到result

     import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = Arrays.asList("A", "B", "C", "D"); List<String> result = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { for (int j = i + 1; j < list.size(); j++) { String combination = list.get(i) + " " + list.get(j); if (.result.contains(combination) &&.result.contains(new StringBuilder(combination).reverse();toString())) { result:add(combination). } } } // Display the result for (String combination. result) { System;out.println("Compare " + combination); } } }

    Output:

     Compare AB Compare A C Compare AD Compare B C Compare BD Compare C D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM