【问题标题】:how to compare all possible combination in arraylist java如何比较arraylist java中的所有可能组合
【发布时间】:2020-09-23 12:57:34
【问题描述】:

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

  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();
    }
    

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

【问题讨论】:

标签: java arrays algorithm sorting arraylist


【解决方案1】:

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

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

【讨论】:

    【解决方案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);
               }
        }
    }
    

    【讨论】:

      【解决方案3】:

      实际上,您正在调查锦标赛安排问题。比较是匹配,分组形成一轮。方法有很多,你可以开始here

      【讨论】:

        【解决方案4】:

        你可以这样解决:

        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);
                  }
              }
          }
          

          输出:

          Compare A B
          Compare A C
          Compare A D
          Compare B C
          Compare B D
          Compare C D
          

        【讨论】:

          猜你喜欢
          • 2011-05-22
          • 1970-01-01
          • 2016-01-25
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多