[英]Count elements if in both arrays
有没有可能比较两个没有两个循环的数组? 我有两个带字符串的数组,需要计算相等元素的数量。 (数组的长度可以不同)
假设所有元素在每个数组中都是唯一的:
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()));
如果每个数组中的元素都不唯一,则为两个数组创建一个中间集。
像这样
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
您可以使用Arrays.asList(...).contains(...)
并为每个“ true
”结果增加一个计数器( cont++
);
希望能帮助到你!
基本上没有 您必须至少使用两个嵌套循环( for
, while
, do-while
)或模仿循环的递归方法之类的其他技术,但最后您将使用两个。 即使您使用List#contains
(如RafaRomero的回答所述 ),您仍在使用两个嵌套循环,虽然不是显式的,但它们在那里。
另一个选择可能是使用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;
}
在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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.