[英]how to compare all possible combination in arraylist java
例如,我们有这种列表(“A”、“B”、“C”、“D”)。 我们需要相互比较,而不是重复比较,例如 output 应该是这样的。
“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 分组一轮。 有很多方法可以做到这一点,您可以从这里开始。
您可以按以下方式解决它:
List
,例如result
,如下例所示。 使用嵌套循环,创建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.