[英]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.