有没有可能比较没有两个循环的两个数组? 我有两个带字符串的数组,需要计算相等元素的数量。 (数组的长度可以不同)
答案 0 :(得分:3)
假设每个数组中的所有元素都是唯一的:
String[] a ={"A","B", "E"};
String[] b={"A","B","C", "D", "E"};
Set<String> set = new HashSet<String>();
set.addAll(Arrays.asList(a));
set.addAll(Arrays.asList(b));
System.out.println("nb of equal elements "+ (a.length + b.length - set.size()));
如果每个数组中的元素不唯一,请为两个数组创建一个中间集。
答案 1 :(得分:1)
喜欢这个
String[] a ={"A","B"};
String[] b={"A","B","C"};
List<String> list=new ArrayList<String>();
list.addAll(Arrays.asList(a));
list.retainAll(Arrays.asList(b));
System.out.println(list);
System.out.println("equal elements:"+list.size());
<强>输出强>
[A, B]
equal elements:2
答案 2 :(得分:0)
您可以使用Arrays.asList(...).contains(...)
,并为每个“true
”结果增加一个计数器(cont++
);
希望它有所帮助!
答案 3 :(得分:0)
基本上没有。您必须使用至少两个嵌套循环(for
,while
,do-while
)或其他技术,如模仿循环的递归方法,但最后您将使用两个。即使您使用List#contains
(如RafaRomero's answer中所述),您也会使用两个嵌套循环,而不是显式,但它们就在那里。
另一个选项可能是使用Set<String>
来存储String
,如果该元素已经在Set
,那么您的计数器将添加1个值。请注意,此替代方法将使用两个非嵌套循环:
public int countEqualElements(String[] yourFirstStringArray, String[] yourSecondStringArray) {
Set<String> mainData = new HashSet<String>();
int counter = 0;
for (String string : yourFirstStringArray) {
mainData.add(string);
}
for (String string : yourSecondStringArray) {
if (!mainData.add(string)) {
counter++;
}
}
return counter;
}
答案 4 :(得分:0)
在Collection中使用set方法(唯一值)
String[] arrayA = new String[] {"A", "B", "C"};
String[] arrayB = new String[] { "B", "C", "D"};
Set<String> setA= new HashSet<String>(Arrays.asList(arrayA));
Set<String> setB= new HashSet<String>(Arrays.asList(arrayB));
setA.retainAll(setB);
System.out.println(setA.size());